У меня есть функция, которая должна проверять файлы каталога, и если он находит файл с определенным именем, он должен удалить каталог (вроде как очистка)
public static void consumeFolderFiles(string path)
{
// get directory info
DirectoryInfo info = new DirectoryInfo(path);
// I want the files to be in order because I am planning to send them via FTP in order in the future.
FileInfo[] files = info.GetFiles().OrderBy(p => p.CreationTime).ToArray();
bool success = false;
if (files.Length > 0)
{
// FTP logic (not implemented yet)
// Check if there's a file's name that contains "balance"
success = files.FirstOrDefault(f => f.Name.ToLower().Contains("balance")) != null;
// Check if it's time to delete the directory
if (success)
{
Directory.Delete(path, true);
}
}
else
{
// Custom exception
throw new NoNewTransactionsInFolderException();
}
}
Эта функция, кажется,работает, но иногда я получаю исключение "процесс не может получить доступ к файлу ****. ***, потому что он используется другим процессом". Также я заметил, что все файлы до исключения были удалены нормально.
Функция выдает исключение непоследовательно.Это означает, что он может удалить папку или остановиться где-то посередине.Таким образом, я не думаю, что забыл закрыть ресурс или обработчик.
Я думаю, что это хорошая идея, чтобы включить функцию создания файла.Я мог что-то там пропустить.
public static void createXMLFile(object o, string path, string fileName)
{
XmlSerializer xml = new XmlSerializer(o.GetType());
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");
XmlTextWriter xtw = new XmlTextWriter(Path.Combine(path, fileName), Encoding.UTF8);
xtw.Formatting = Formatting.Indented;
xml.Serialize(xtw, o, ns);
xtw.Close();
xtw.Dispose();
}
Я видел другие ответы, где люди предлагали добавить try catch и вызвать Directory.Delete (path, true) в предложении catch или использовать .NET Transactional File Manager.Тем не менее, я хотел бы знать причину этого исключения.Это я что-то не так делаю или ошибка ОС?