C# 目录。目录中的移动结果不为空错误

C# 目录。目录中的移动结果不为空错误,c#,asp.net,.net,system.io.directory,C#,Asp.net,.net,System.io.directory,我有一个商业ASP.NET应用程序在数百台服务器上运行。当应用程序尝试移动通过UNC语法访问的文件共享上的目录时,一位客户遇到以下错误 System.IO.IOException: The directory is not empty. 堆栈跟踪: at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.Directory.InternalMove(String sourceDirN

我有一个商业ASP.NET应用程序在数百台服务器上运行。当应用程序尝试移动通过UNC语法访问的文件共享上的目录时,一位客户遇到以下错误

System.IO.IOException: The directory is not empty.
堆栈跟踪:

at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.Directory.InternalMove(String sourceDirName, String destDirName, Boolean checkHost)
at GalleryServer.Business.AlbumSaveBehavior.PersistToFileSystemStore(IAlbum album)
at GalleryServer.Business.AlbumSaveBehavior.Save()
at GalleryServer.Business.GalleryObject.Save()
at GalleryServer.Business.Album.MoveTo(IAlbum destinationAlbum)
at GalleryServer.Web.Controller.AlbumController.TransferToAlbum(Int32 destinationAlbumId, GalleryItem[] itemsToTransfer, GalleryAssetTransferType  transferType, GalleryItem[] createdGalleryItems)
at GalleryServer.Web.Api.AlbumsController.TransferTo(Int32 destinationAlbumId, GalleryItem[] itemsToTransfer, GalleryAssetTransferType transferType)
代码如下所示(简化):

我应该注意,当目录为空时,代码成功。当它包含文件时,它应该可以工作,事实上,对于其他客户也是如此

ASP.NET应用程序正在IIS中运行,其AD帐户用于应用程序池标识。我已确认它对文件共享目录具有“修改”权限


什么样的服务器配置或权限条件会触发此错误?我自己运行了许多测试,无法重新进行测试。

目录。Move
在内核32.dll中内部调用
移动文件

这将导致系统错误0x91()


从这里很难分辨,但源文件夹中可能有一个文件无法被您的用户帐户移动

你能试试贴出的答案吗?答案确实克服了对内部功能的限制,而且更加安全。

移动目录意味着删除原始目录及其文件。如果没有足够的权限,或者原始目录中的文件处于“打开”状态,则该操作将失败。或者可能只是第二部分。它也可能是使用该文件的用户计算机上的防病毒软件。。。它总是失败吗。如果您尝试使用资源管理器手动移动文件,会得到什么结果?
var sourceDir = @"\\server\storage\folder1";
var destDir = @"\\server\storage\folder2";

System.IO.Directory.Move(sourceDir, destDir);