如果文件名已经存在,是否有内置的.NET函数来获取唯一的文件名?因此,如果我尝试保存MyDoc.doc
并且它已经存在,则该文件将以名称MyDoc(1).doc
保存,例如与浏览器下载相同的方式。
如果没有,实现这一结果的最有效方法是什么?
目前我正在使用File.Move
功能。
答案 0 :(得分:3)
<强> 修改 强>:
这是我在Steven Sudit发表评论后提出的另一个解决方案:
static void Main(string[] args)
{
CopyFile(new FileInfo(@"D:\table.txt"), new FileInfo(@"D:\blah.txt"));
}
private static void CopyFile(FileInfo source, FileInfo destination)
{
int attempt = 0;
FileInfo originalDestination = destination;
while (destination.Exists || !TryCopyTo(source, destination))
{
attempt++;
destination = new FileInfo(originalDestination.FullName.Remove(
originalDestination.FullName.Length - originalDestination.Extension.Length)
+ " (" + attempt + ")" + originalDestination.Extension);
}
}
private static bool TryCopyTo(FileInfo source, FileInfo destination)
{
try
{
source.CopyTo(destination.FullName);
return true;
}
catch
{
return false;
}
}
答案 1 :(得分:2)
检查正则表达式*.\(\d+\)
的名称,如果它不匹配,添加(1),如果匹配则增加括号中的数字。
答案 2 :(得分:1)
我不知道,但自己建立一个并不难:
if filename does not exists then
save file as filename
else
n = 1
while filename(n) exists:
n += 1
save file as filename(n)
答案 3 :(得分:1)
正如其他答案所示,有多种方法可以做到这一点,但有一点需要注意的是,如果您可以创建文件之外的其他进程必须要小心,因为如果您检查文件名是否可用,请通过保存新文件的时间,其他一些进程可能已经使用该名称保存了文件,您将覆盖该文件。