#c# #file-io #io
#c# #file-io #io
Вопрос:
Я использую Directory.Метод удаления (путь, true) для удаления каталога. Перед удалением я использую этот метод, чтобы проверить, можно ли удалить папку:
private bool FileCanDelete(string path)
{
try
{
//if this does not throw exception then the file is not use by another program
using (FileStream fileStream = File.OpenWrite(path))
{
if (fileStream == null)
return false;
}
return true;
}
catch (UnauthorizedAccessException uaex)
{
throw uaex;
}
catch
{
return false;
}
}
Если возвращаемый результат равен true, вызовите метод delete. Я вижу, что все файлы и подкаталоги уже удалены, но метод выдает исключение: «Процесс не может получить доступ к файлу ‘xxxxxxx'».
Если не удалось удалить всю папку целиком, я хочу, чтобы операция удаления не удаляла ни одного файла в папке.
Комментарии:
1. Я вижу, что функция вернет true, даже если вы только что создали экземпляр
FileStream
файла. Это локальная переменная и все такое, но я не уверен, что сборщик мусора освободит ее как раз вовремя для следующей операции (вызова delete). Вы пробовали освобождать его вручную, прежде чем возвращать true?2. @Havenard Я предполагаю, что это не будет проблемой, поскольку
using
гарантирует удаление потока.
Ответ №1:
Попробуйте использовать файловый менеджер транзакций .NET
TxFileManager fileMgr = new TxFileManager();
using (TransactionScope scope1 = new TransactionScope())
{
fileMgr.DeleteDirectory(path);
scope1.Complete();
}