为重命名文件夹的名称,我使用了以下代码。 当我调试它时,每个函数都会返回一个正确的值,并且它会识别带有模式的文件夹 但是它不能重命名文件夹名称!
string[] myDirectories = Directory.GetDirectories(myRootPath, "*",
SearchOption.AllDirectories);
string findFolderNamePattern = @"((?i)domain|.com(?-i))";
string replacement = "";
foreach (var myDirectory in myDirectories)
{
Regex.Replace(myDirectory, findFolderNamePattern, replacement);
}
答案 0 :(得分:1)
在这种情况下,您似乎正在更改字符串,而不是在任何地方重命名文件夹。您需要仔细检查并重命名已标识的文件夹,如下所示:
foreach(var myDirectory in myDirectories)
{
new DirectoryInfo(myDirectory).MoveTo(Regex.Replace(myDirectory, findFolderNamePattern, replacement));
}
这应该重命名每个文件夹。
答案 1 :(得分:1)
我认为有两件事要考虑:
与输入字符串相同的新字符串, 除了替换字符串代替每个匹配字符串 串。如果当前实例中的模式不匹配,则该方法 返回当前实例不变。
您可以看看here。
基于这些代码,以下代码查找匹配的文件夹名称并将其重命名。
string findFolderNamePattern = @"((?i)domain|.com(?-i))";
string replacement = "";
foreach (var myDirectory in myDirectories)
{
string newDirName = Regex.Replace(myDirectory, findFolderNamePattern, replacement);
Directory.Move(myDirectory, newDirName);
}
答案 2 :(得分:0)
如果要更新数组,请使用for循环并在其中定义变量。
for (int x=0; x < myDirectories.Count; x++)
{
replacement = Regex.Replace(myDirectories[x], findFolderNamePattern);
myDirectories[x] = replacement; //this requires a for loop
}
或者忘记临时变量:
for (int x=0; x < myDirectories.Count; x++)
{
myDirectories[x] = Regex.Replace(myDirectories[x], findFolderNamePattern);
}
如果您不想使用for循环:
int x = 0;
foreach (var myDirectory in myDirectories.ToList())
{
replacement = Regex.Replace(myDirectory, findFolderNamePattern);
myDirectories[x] = replacement; //this requires a for loop
x++;
}
或者,只需执行此操作(如Dan Wilson所评论):
replacement = Regex.Replace(myDirectories[x], findFolderNamePattern);
答案 3 :(得分:0)
由于您不能更改循环迭代器,因此可以使用另一个数组,如下面的代码所示:
public static void Rename(string myRootPath)
{
string[] myDirectories = Directory.GetDirectories(myRootPath, "*", SearchOption.AllDirectories);
string[] myDirectoriesModified = new string[myDirectories.Length];
string findFolderNamePattern = @"((?i)domain|.com(?-i))";
string replacement = "";
int i = 0;
foreach (var myDirectory in myDirectories)
{
myDirectoriesModified[i] = Regex.Replace(myDirectory, findFolderNamePattern, replacement);
i++;
}
}