С вашим кодом много ошибок. getFileList
имеет ненужную внутреннюю петлю for
для начинающих. Избавиться от этого. Ваша foreach
петля имеет s
, которая может заменить filepaths[i]
из вашей for
петли. Кроме того, не делайте outputPath + result
для создания путей к файлам. Вместо этого используйте Path.Combine(outputPath, result)
, поскольку Path.Combine
обрабатывает символы каталога для вас. Кроме того, вам нужно придумать лучшее имя для getFileList
, так как это совсем не то, что делает метод. Не делайте ваши методы именами лжецов.
Я бы просто избавился от MoveVideoFiles
. Компилятор тоже может.
GetUniqueName
работает только в том случае, если имя вашего файла имеет форму name.mov.fidef
, что, как я полагаю, так и есть. Вам действительно нужны более подходящие имена переменных, иначе позже это будет ночное обслуживание. Я бы избавился от == true
в условии while
loop, но это необязательно. Назначение внутри while
- вот почему ваши файлы перезаписываются. Вы всегда генерируете одно и то же имя (something(Copy).mov.fidef
), и, насколько я могу судить, если файл существует, я думаю, что вы уничтожаете цикл стека навсегда. Вам нужно исправить этот цикл, чтобы сгенерировать новое имя (и не забудьте Path.Combine
). Может быть, что-то вроде этого (обратите внимание, это не проверено):
int copyCount = 0;
while (File.Exists(ValidName))
{
const string CopyName = "(Copy)";
string copyString = copyCount == 0 ? CopyName : (CopyName + "(" + copyCount + ")");
string tempName = Justname + copyString + Extension2 + Extension;
ValidName = Path.Combine(outputPath, tempName);
copyCount++;
}
Создает something(Copy).mov.fidef
для первой копии, something(Copy)(2).mov.fidef
для второй и так далее. Может быть, не то, что вы хотите, но вы можете внести коррективы.
На данный момент у вас много дел. getMovFile
выглядит так, как будто он может использовать работу так же, как GetUniqueName
. Вы поймете это. Удачи.