2010-07-27 54 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 

然后你就可以得到一个目录列表并且只是到列表的最后找到最后一个文件

但要小心:如果程序的两个实例同时运行会发生什么?测试文件存在与创建之间有一点点机会。