何百ものサーバーで実行されている商用 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 アプリは、アプリケーション プール ID の AD アカウントを使用して IIS で実行されています。ファイル共有ディレクトリに対する「変更」権限があることを確認しました。
このエラーを引き起こす可能性があるのは、どのようなサーバー構成または許可条件ですか? 私は自分で多くのテストを実行しましたが、再現できません。