我有一个在数百台服务器上运行的商业 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)
代码如下所示(简化):
var sourceDir = @"\\server\storage\folder1";
var destDir = @"\\server\storage\folder2";
System.IO.Directory.Move(sourceDir, destDir);
我应该注意,当目录为空时代码会成功。当它包含文件时它应该可以工作,实际上它对其他客户也有效。
ASP.NET 应用程序在 IIS 中使用应用程序池标识的 AD 帐户运行。我已经确认它对文件共享目录具有“修改”权限。
什么样的服务器配置或权限条件会触发此错误?我自己进行了许多测试,但无法重现。