File.Exists + File.Move Ошибка "Процесс не может получить доступ к файлу, потому что он используется другим процессом".
У меня есть то, что я думал, будет очень простой скрипт перемещения файлов. Он проверяет файл и перемещает его в новый каталог, если он существует:
if (File.Exists(_collection[x,0]))
{
System.IO.File.Move(_collection[x, 0], _moveTo);
MessageBox.Show("File moved because it was stale.");
}
Он проходит проверку того, что файл существует, но затем выдает ошибки в следующей строке при попытке переместить его, заявляя, что файл используется другим процессом. Я могу только предположить, что File.Exists заставляет его как-то зависать, но не может найти решение от кого-то еще, кто имел эту проблему.
1 ответ
Решение
Попробуйте этот код:
string filePathNameToMove = "";
string directoryPathToMove = "";
if (File.Exists(filePathNameToMove))
{
string destinationFilePathName =
Path.Combine(directoryPathToMove, Path.GetFileName(filePathNameToMove));
if (!File.Exists(destinationFilePathName))
{
try
{
File.Move(filePathNameToMove, destinationFilePathName);
Console.WriteLine("File Moved!");
}
catch (Exception e)
{
Console.WriteLine("File Not Moved! Error:" + e.Message);
}
}
}
В случае, если у кого-то еще есть эта проблема. В моем случае файл был открыт в Excel, и после его завершения Excel никогда не собирал мусор. Таким образом, ОС все еще думала, что к файлу обращаются. Я сделал следующее, сырой, но это работает.
for (int i = 1; i > 0; i++)
{
try
{
File.Move(sourceFileName, destinationFileName);
break;
} catch
{
GC.Collect();
}
}