我想创建算法,为我想要添加到主目录的新文件生成名称。 此目录中的所有文件都必须具有唯一名称,并以“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 :(得分:2)
如果您不担心文件名的其余部分(除了以“myFile”开头),那么您只需创建一个GUID并将其连接到worg“myFile”。这是最简单的方法。另一种方式可能正在使用系统标记并将其作为字符串添加到单词“myFile”。
答案 1 :(得分:2)
如果您构建文件名以便按字母顺序排序
base000001
base000002
...
base000997
然后你可以得到一个目录列表,然后到列表的末尾找到最后一个文件。
但请注意:如果程序的两个实例同时运行会发生什么?在现有文件的测试和创建之间有一点机会之窗。
答案 2 :(得分:1)