Я столкнулся со странной проблемой (, которая, вероятно, связана с моим недостатком знаний ), я представляю код нарушения :
try
{
f.Delete();
fTemp.MoveTo(f.FullName);
Console.WriteLine("INFO: Old file deleted new file moved in > {0}", f.FullName);
}
catch (IOException ex)
{
Console.WriteLine("ERROR: Output file has IO exception > {0}", f.FullName);
Environment.ExitCode = 1;
}
. f и fTemp являются объектами FileInfo. Поэтому, если я запускаю это с кодом, где f — это видеофайл, воспроизводимый в медиаплеере, он выдает исключение. Это работает нормально и, как и ожидалось. Теперь, когда я закрываю медиаплеер, он удаляет файл!? Хотя мое приложение давно закрыто. Даже когда я закрываю Visual Studio, он все равно удаляет файл, когда я закрываю медиаплеер. Как будто где-то настраивается какой-то обратный вызов, чтобы убедиться, что файл в какой-то момент будет удален. Это отклонение в нежелательном поведении. Но я не могу понять, что именно пошло не так...
Результат на данный момент:
if (!IsFileLocked(f))
{
try
{
f.Delete();
fTemp.MoveTo(f.FullName);
Console.WriteLine("INFO: Old file deleted new file moved in > {0}", f.FullName);
}
catch (IOException ex)
{
Console.WriteLine("ERROR: Output file has IO exception > {0}", f.FullName);
Environment.ExitCode = 1;
}
catch (UnauthorizedAccessException ex)
{
Environment.ExitCode = 2;
Console.WriteLine("ERROR: Output file is locked > {0}", f.FullName);
}
}
else
{
Environment.ExitCode = 3;
Console.WriteLine("ERROR: Couldn't delete file was locked");
}
Я знаю, что между Delete и MoveTo все еще можно добиться большего успеха, но пока я возьму свои изменения, кодирование дробовика.....