Удалите файлы после загрузки и обработки из того же места с помощью Directory.Delete(), выдавая ошибку "Directory is not empty" в C#.net
Я использую 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();
}
}
// метод вставки в БД
// Код для удаления загруженной папки
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.__Error.WinIOError(Int32 errorCode, String MaybeFullPath) в System.IO.Directory.DeleteHelper(String fullPath, String userPath, логический рекурсивный, логический throwOnTopLevelDirectoryNotFound full в System.IO.DirectoryPele), Строка userPath, логическая рекурсия, логическая проверка Host)