Zetalongpath を使用して、長いパスの pdf ファイルにアクセスしています。
ファイルは「D:\Active Folder\ReadyTobeTransfer\ABC\XYZ」のような場所から「D:\Upload Intake\ABC\XYZ」にアップロードされます。
これはクライアントの要件であるため、アップロードが成功した後、フォルダー ABC を再帰的に削除したいと考えています。
アップロードされたファイルをブラウザから保存するための私のコードは次のとおりです。
var FilingDocs = new List<HttpPostedFileBase>();
for (var i = 0; i < Request.Files.Count; i++)
{
if (Request.Files[i].FileName.Substring(Request.Files[i].FileName.LastIndexOf('.') + 1).ToLower() == "pdf")
{
FilingDocs.Add(Request.Files[i]);
}
}
foreach (HttpPostedFileBase file in FilingDocs)
{
if (file != null)
{
// Read bytes from http input stream
BinaryReader b = new BinaryReader(file.InputStream);
byte[] binData = b.ReadBytes(file.ContentLength);
string fileName;
if (file.FileName.LastIndexOf('\\') > 0)
{
fileName = file.FileName.Substring(file.FileName.LastIndexOf('\\') + 1);
}
else
{
fileName = file.FileName;
}
ZlpIOHelper.WriteAllBytes(fullPath + '\\' + fileName, binData);
file.InputStream.Close();
b.Close();
}
}
//DB挿入メソッド
//アップロードしたフォルダを削除するコード
string ParentFolder = "D:\Active Folder\ReadyTobeTransfer\ABC";
string ChildFolder = "D:\Active Folder\ReadyTobeTransfer\ABC\XYZ";
//Delete Files from ChildFolder
string[] files = Directory.GetFiles(ChildFolder, "*.pdf");
try
{
foreach (string file in files)
{
//Remove read only access
System.IO.File.SetAttributes(file, FileAttributes.Normal);
System.IO.File.Delete(file);
}
//Sleep for 5 second
System.Threading.Thread.Sleep(new TimeSpan(0, 0, 5));
//Check whether Child Folder Exist
if (ZlpIOHelper.DirectoryExists(ChildFolder))
{
//Delete Uploaded Files Folder
Directory.Delete(ChildFolder, true);
}
//Sleep for 5 second
System.Threading.Thread.Sleep(new TimeSpan(0, 0, 5));
//Check whether Parent Folder Exist
if (Directory.Exists(ParentFolder))
{
//Get Parent File information to check whether it contains any file or folder
ZlpDirectoryInfo DeleteParentFolder = new ZlpDirectoryInfo(ParentFolder);
if (DeleteParentFolder.GetFiles().Length == 0 && DeleteParentFolder.GetDirectories().Length == 0)
{
//Delete Parent Folder
Directory.Delete(ParentFolder, true);
}
}
}
catch (IOException)
{
if (ZlpIOHelper.DirectoryExists(ChildFolder))
Directory.Delete(ChildFolder);
if (ZlpIOHelper.DirectoryExists(ParentFolder))
Directory.Delete(ParentFolder);
}
catch (UnauthorizedAccessException)
{
if (ZlpIOHelper.DirectoryExists(ChildFolder))
Directory.Delete(ChildFolder);
if (ZlpIOHelper.DirectoryExists(ParentFolder))
Directory.Delete(ParentFolder);
}
削除コードにより、「ディレクトリが空ではありません」というエラーが発生します。ただし、ファイルは場所「D:\Active Folder\ReadyTobeTransfer\ABC\XYZ」から削除されますが、親フォルダーと子フォルダーは削除されません。
これはエラーメッセージです
ディレクトリが空ではありません。StackTrace:- System.IO.Directory.DeleteHelper(String fullPath, String userPath, Boolean recursive, Boolean throwOnTopLevelDirectoryNotFound) で System.IO.Directory.Delete(String fullPath) で System.IO.__Error.WinIOError(Int32 errorCode, String MaybeFullPath) で、文字列 userPath、ブール値の再帰、ブール値の checkHost)