Файл C #.Move создает пустой файл и исключение ввода-вывода

#c# #.net #ffmpeg

#c# #.net #ffmpeg

Вопрос:

Мой код обрабатывает видеофайл (с использованием ffmpeg) и создает для него различные качества (360p, 480p и т. Д.) И форматы (mp4 и HLS). После создания этих файлов я перемещаю их все на другой диск (сетевое расположение).

мой код выглядит следующим образом:

 var files = Directory.GetFiles(srcFolder);
string filename, destFile = string.Empty, srcFile = string.Empty;
try
{
    for (int i = 0; i < files.Length; i  )
    {
        srcFile = files[i];
        filename = Path.GetFileName(srcFile);
        destFile = Path.Combine(destFolder, filename);
        File.Move(srcFile, destFile);
    }
}
catch
{
    _logger.LogError("Error in moving file. srcFile: {0}, destFile: {1}", destFile, srcFile);
    throw;
}
 

Большую часть времени этот процесс работает нормально, но для некоторых файлов я получаю исключение ввода-вывода при каждом запуске этого процесса.

System.IO.IOException: файл существует. в System.IO.FileSystem.MoveFile(строка sourceFullPath, строка destFullPath, логическая перезапись)

Я убедился, что папка destFolder ранее не существовала, равно как и файл destFile.

После регистрации ошибки и нахождения пути к исходному и целевому файлам я загрузил их оба. Исходным файлом является файл .ts размером 1048 КБ, а целевой файл — пустой файл с тем же именем (0 КБ).

Эта ошибка возникала несколько раз с одним и тем же видео, поэтому я предполагаю, что это как-то связано с самим файлом. Но я не могу понять это.

Комментарии:

1. У вас есть доступ к отладке этой части?

2. Вы пробовали File. Переместить(srcFile, destFile, true); ? Это попытка переопределить файл, если он уже существует

3. @NoConnection Это, вероятно, устраняет ошибку, но мне нужно знать, почему это происходит. Может возникнуть проблема, которая приведет к другим сбоям в будущем.

4. Много лет назад у меня были проблемы с файлом. Переместить команду из одного сетевого расположения в другое, даже потеряв файлы. Поэтому с этого времени я использовал только свою собственную реализацию, выполняя отдельное копирование и удаление, с промежуточными проверками, и никогда больше не сталкивался с проблемой…

5. @ShivamMishra Я использовал подход копирования удаления, предложенный Пойтером.