如果指定的文件名已存在,则获取唯一文件名的方法(.NET)

如果文件名已经存在,是否有内置的.NET函数来获取唯一的文件名? 因此,如果我尝试保存MyDoc.doc并且它已经存在,则该文件将以名称MyDoc(1).doc保存,例如与浏览器下载相同的方式。

如果没有,实现这一结果的最有效方法是什么?

我目前正在使用File.Move函数。

检查Regex *.\(\d+\) ,如果不匹配,添加(1),如果匹配则增加括号中的数字。

编辑

这是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; } } 

我不知道,但自己建立一个并不难:

 if filename does not exists then save file as filename else n = 1 while filename(n) exists: n += 1 save file as filename(n) 

正如其他答案所示,有多种方法可以做到这一点,但要注意的一件事是,如果您可以创建文件之外的其他进程必须要小心,因为如果您检查文件名是否可用,那么当您保存新文件,其他一些进程可能已经使用该名称保存了文件,您将覆盖该文件。