2010-07-27 55 views
1

我想創建算法,爲要添加到主目錄的新文件生成名稱。 此目錄中的所有文件必須具有唯一的名稱,並以「myFile」開頭遞增文件名

您對此算法有何看法?我可以優化它嗎?

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上,可以通過選擇要重命名的文件,然後按F2鍵一次通過資源管理器重命名多個文件。 只需提供一個新名稱,然後按Enter即可。所有文件將被重新命名,然後在括號後加上一個增加的數字。 – KeesDijk 2010-07-27 07:03:04

回答

2

如果你不擔心文件名的其餘部分(除開始爲「MYFILE」,那麼你可以簡單地創建一個GUID,並將其Concat的到座狼「MYFILE」,這是最簡單的方法。另一種方法可能會採取SYSTE蜱並將其添加爲一個字符串單詞「MYFILE」。

2

如果您構建您的文件名,讓他們按字母順序排序

base000001 
base000002 
... 
base000997 

然後你就可以得到一個目錄列表並且只是到列表的最後找到最後一個文件

但要小心:如果程序的兩個實例同時運行會發生什麼?測試文件存在與創建之間有一點點機會。