2010-07-27 3 views
1

Я хочу создать алгоритм, чтобы сгенерировать имя для нового файла, который я хочу добавить в главную директорию. Все файлы в этом каталоге должны иметь уникальное имя и начинаться с «myFile»Increment filename

Что вы думаете об этом алгоритме? Могу ли я его оптимизировать?

string startFileName="myFile.jpg"; 
string startDirectory="c:\MyPhotosWithSubFoldersAndWithFilesInMainDirectory"; 

bool fileWithThisNameExists = false; 
string tempName = null; 
do 
{ 

    tempName = startFileName +"_"+ counter++ + Path.GetExtension(startFileName); 
    foreach (var file in Directory.GetFiles(startDirectory) 
    { 
     if (Path.GetFileName(tempName) == Path.GetFileName(file)) 
     { 
      fileWithThisNameExists = true; 
     } 
    } 

    if (fileWithThisNameExists) continue; 
    foreach (var directory in Directory.GetDirectories(startDirectory)) 
    { 
     foreach (var file in Directory.GetFiles(directory)) 
     { 
      if (Path.GetFileName(tempName) == Path.GetFileName(file)) 
      { 
       fileWithThisNameExists = true; 
      } 
     } 
    } 
} while (fileWithThisNameExists); 
+0

Для алгоритма я бы с GUID как Kangkan предложил. Но, глядя на ваш код, похоже, что вы пытаетесь сделать что-то, что может сделать Windows для вас. В Windows XP и более поздних версиях Windows можно переименовать несколько файлов одновременно через Explorer, выбрав файлы для переименования, а затем нажав клавишу F2. Просто введите новое имя и нажмите Enter. Все файлы будут переименованы, а затем в скобках будет увеличено число. – KeesDijk

ответ

2

Если вы не беспокоитесь об остальной части имени файла (за исключением запуска, как «Myfile», то вы можете просто создать GUID и Concat его к ворга «Myfile». Это самый простой способ . другой способ может быть принимая противовирусные тики и добавить его в виде строки слова «Myfile».

2

Если вы строите ваши имена файлов, так что они сортируют по алфавиту

base000001 
base000002 
... 
base000997 

Тогда вы можете получить каталог и просто перейдите в конец списка, чтобы найти последний файл.

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

Смежные вопросы