[英]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.