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

时间:2010-06-22 12:24:07

标签: c# filesystems .net

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

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

目前我正在使用File.Move功能。

4 个答案:

答案 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)

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