Way to get unique filename if specified filename already exists (.NET)

前端 未结 4 1285
醉酒成梦
醉酒成梦 2021-01-20 00:00

Is there a built in .NET function to get a unique filename if a filename already exists? So if I try and save MyDoc.doc and it already exists, the file will sav

相关标签:
4条回答
  • 2021-01-20 00:36

    I don't know, but it's not hard to build one yourself:

    if filename does not exists then 
        save file as filename
    else
    n = 1
    while filename(n) exists: 
        n += 1
    save file as filename(n)
    
    0 讨论(0)
  • 2021-01-20 00:39

    As the other answers shows, there are multiple ways of doing this, but one thing to be aware of is if other processes than your can create files you have to be careful, since if you check that a filename is available, by the time you save your new file, some other process might already have saved a file using that name and you'll overwrite that file.

    0 讨论(0)
  • 2021-01-20 00:50

    check the name against Regex *.\(\d+\), if it doesn't match, add (1), if it matches increment the number in brackets.

    0 讨论(0)
  • 2021-01-20 00:52

    EDIT:

    Here's another solution I came up with after Steven Sudit's comment:

    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;
        }
    }
    
    0 讨论(0)
提交回复
热议问题