簡體   English   中英

如果目錄存在則創建目錄

[英]Creating directory if directory exists

我有以下目錄:

\\\\ 192.168.255.86 \\外接程序\\ Requests \\ MyFolder1

如果此目錄存在(指定的路徑上已經有一個文件夾),則需要創建以下內容:

\\\\ 192.168.255.86 \\ Add-in \\ Requests \\ MyFolder1(1)

如果目錄仍然存在,則需要創建另一個目錄:

\\\\ 192.168.255.86 \\ Add-in \\ Requests \\ MyFolder1(2)

等等。 我是在以下方法中使用while循環完成此操作的:

public static string CreateDirectory(string path)
    {
        if (!Directory.Exists(path))
        {
            Directory.CreateDirectory(path);
            return path;
        }
        int i = 1;
        while (Directory.Exists(path + $" ({i})"))
        {
            i++;
        }
        path += $" ({i})";
        Directory.CreateDirectory(path);
        return path;
    }

如何使用遞歸?

您不需要在這里遞歸。 您只需要用下一個可用名稱(通過添加數字)創建新目錄即可。

稍微重構的方法可能如下所示:

public string NextDirectory(string path)
{
    var dir = path;
    int n = 1;
    while (Directory.Exists(dir))
        dir = $"{path} ({n++})";
    Directory.CreateDirectory(dir);
    return dir;
}

如果您堅持使用遞歸,那么這應該很好:

    public static string CreateDirectory(string path, int suffix = 0)
    {
        string directoryPath = DirectoryPath(path, suffix);
        if (!CreateDirectory(directoryPath))
            return CreateDirectory(path, i + 1);
        return directoryPath;
    }

    private static bool CreateDirectory(string path)
    {
        if (Directory.Exists(path))
            return false;

        Directory.CreateDirectory(path);
        return true;
    }

    private static string DirectoryPath(string path, int suffix)
    {
        return $"{path}{(suffix > 0 ? $" ({suffix})" : string.Empty)}";
    }

但是,如果您已經擁有“ MyFolder1(214)”,那么您的調用堆棧可能會很大!

也許這是執行while循環的一種稍微更整潔的方法(但本質上是相同的):

    public static string CreateDirectory(string path)
    {
        string createPath = GetUniquePath(path);
        Directory.CreateDirectory(createPath);
        return createPath;
    }
    private static string GetUniquePath(string path)
    {
        string result = path;
        int i = 1;
        while (Directory.Exists(result))
            result = $"{path} ({i++})";
        return result;
    }

您可以使用此:

  public static string CreateDirectory(string path, int i)
    {
        if (i>0)
        {
            if (Directory.Exists(path + $" ({i})"))
                return CreateDirectory(path,++i);
            else
            {
                Directory.CreateDirectory(path + $" ({i})"));
                return path + $" ({i})";
            }
        }
        else
            if (!Directory.Exists(path))
            {
                Directory.CreateDirectory(path);
                return path;
            }
            else
                return CreateDirectory(path,1);    
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM