Skip to content
This repository has been archived by the owner on Dec 6, 2024. It is now read-only.

Commit

Permalink
Fixes #479: File.Move on a file opened with FileShare.Delete succeeds…
Browse files Browse the repository at this point in the history
… but throws IOException.
  • Loading branch information
Yomodo committed Jul 13, 2018
1 parent 0541ad6 commit 1d18ee8
Show file tree
Hide file tree
Showing 4 changed files with 78 additions and 1 deletion.
1 change: 1 addition & 0 deletions AlphaFS.UnitTest/AlphaFS.UnitTest.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,7 @@
<Compile Include="File Class\File.Delete\File.Delete_EmptyAsPath_ThrowsArgumentException.cs" />
<Compile Include="File Class\File.Delete\File.Delete_NullAsPath_ThrowsArgumentNullException.cs" />
<Compile Include="File Class\File.Delete\File.Delete_NonExistingFile_NoException.cs" />
<Compile Include="File Class\File.Move\AlphaFS_File.Move_FileOpenedWithFileShareDeleteFlag.cs" />
<Compile Include="File Class\File.Move\File.Move_EmptyDestFileNameAsPath_ThrowsArgumentException.cs" />
<Compile Include="File Class\File.Move\File.Move_EmptySourceFileNameAsPath_ThrowsArgumentException.cs" />
<Compile Include="File Class\File.Move\File.Move_NullDestFileNameAsPath_ThrowsArgumentNullException.cs" />
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
/* Copyright (C) 2008-2018 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/

using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;

namespace AlphaFS.UnitTest
{
public partial class MoveTest
{
// Pattern: <class>_<function>_<scenario>_<expected result>


[TestMethod]
public void AlphaFS_File_Move_FileOpenedWithFileShareDeleteFlag_LocalAndNetwork_Success()
{
AlphaFS_File_Move_FileOpenedWithFileShareDeleteFlag(false);
AlphaFS_File_Move_FileOpenedWithFileShareDeleteFlag(true);
}


private void AlphaFS_File_Move_FileOpenedWithFileShareDeleteFlag(bool isNetwork)
{
using (var tempRoot = new TemporaryDirectory(isNetwork))
{
var folder = tempRoot.CreateDirectory();

var srcFile = System.IO.Path.Combine(folder.FullName, tempRoot.RandomString);

var dstFile = System.IO.Path.Combine(folder.FullName, tempRoot.RandomString);

Console.WriteLine("Src File Path: [{0}]", dstFile);
Console.WriteLine("Dst File Path: [{0}]", dstFile);


using (System.IO.File.Open(srcFile, System.IO.FileMode.Create, System.IO.FileAccess.ReadWrite, System.IO.FileShare.ReadWrite | System.IO.FileShare.Delete))
{
Alphaleonis.Win32.Filesystem.File.Move(srcFile, System.IO.Path.Combine(folder.FullName, dstFile));


Assert.IsFalse(Alphaleonis.Win32.Filesystem.File.Exists(srcFile));

Assert.IsTrue(Alphaleonis.Win32.Filesystem.File.Exists(dstFile));
}
}

Console.WriteLine();
}
}
}
2 changes: 1 addition & 1 deletion AlphaFS/Filesystem/File Class/File.GetSize.cs
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ internal static long GetSizeCore(KernelTransaction transaction, SafeFileHandle s
{
var pathLp = Path.GetExtendedLengthPathCore(transaction, path, pathFormat, GetFullPathOptions.RemoveTrailingDirectorySeparator | GetFullPathOptions.FullCheck);

safeHandle = CreateFileCore(transaction, false, pathLp, ExtendedFileAttributes.Normal, null, FileMode.Open, FileSystemRights.ReadData, FileShare.Read, true, false, PathFormat.LongFullPath);
safeHandle = CreateFileCore(transaction, false, pathLp, ExtendedFileAttributes.Normal, null, FileMode.Open, FileSystemRights.ReadData, FileShare.ReadWrite, true, false, PathFormat.LongFullPath);
}


Expand Down
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,14 @@
Changelog
=========

Version 2.2.5 (2018-XX-XX)
-------------

### Bugs Fixed

- Issue #479: `File.Move` on a file opened with `FileShare.Delete` succeeds but throws `IOException`.


Version 2.2.4 (2018-07-12)
-------------

Expand Down

0 comments on commit 1d18ee8

Please sign in to comment.