У меня есть этот фрагмент кода ниже, были ли я обрабатываю список файлов и перемещаю их в папку назначения.Перемещение файлов в новое место, но игнорирование любых файлов, которые заблокированы и продолжают обработку
У меня уже есть специальная регистрация для файла, который копируется в сеть, которую я хочу сохранить.
В любом случае я могу добавить еще одну конкретную проверку, если файл заблокирован, и я могу его игнорировать и перейти на следующий, а продолжить обработку файлов?
public List<string> ProcessFiles()
{
string[] fileEntries = Directory.GetFiles(this.SourceLocation);
List<string> processedFiles = new List<string>();
foreach (string sourceFile in fileEntries)
{
//Verify the destination path exists and attempt move
if (Directory.Exists(destinationPath))
{
try
{
//Move the file to destination
File.Move(sourceFile, destinationFile);
}
catch(System.InvalidOperationException io)
{
//File is still being copied to the network, wait and try again
System.Threading.Thread.Sleep(500);
File.Move(sourceFile, destinationFile);
}
processedFiles.Add(fileNameNoPath);
}
}
return processedFiles;
}
Вместо проверки, если он заблокирован, вы можете просто игнорировать любые ошибки, которые появляются во время копирования файлов (но журнал курса/показать их). Это простой 'try/catch (исключение)' внутри 'foreach'. Как вы уже делаете, но без второй попытки (что может «бросить» кстати и спать. 'обработанFiles.Add' должен находиться внутри' try' (после 'File.Move'), поэтому он будет только помнить успешно перемещенные файлы. Текущий код предполагает, что второй «File.Move» всегда успешный, и я сомневаюсь. * Операция Retry * обычно организована с помощью Queue и количества attemps. – Sinatr
Спасибо за помощь Sinatr – John
Спасибо за помощь Henk – John