为什么不能在foreach中更改文件夹名称

为了重命名文件夹的名称,我使用了以下代码。当我调试它时,每个返回一个正确的值,它识别具有模式的文件夹但它不能重命名文件夹名称!


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);

}


莫回无
浏览 184回答 3
3回答

波斯汪

在这种情况下,您似乎在更改字符串而不是在任何地方重命名文件夹。您需要遍历并重命名已识别的文件夹,如下所示:foreach(var myDirectory in myDirectories){    new DirectoryInfo(myDirectory).MoveTo(Regex.Replace(myDirectory, findFolderNamePattern, replacement));}这应该重命名每个文件夹,因为它标识了它。

扬帆大鱼

我认为有两点需要考虑:迭代变量不能改变。Regex.Replace 方法接受三个参数并返回:与输入字符串相同的新字符串,只是替换字符串代替了每个匹配的字符串。如果当前实例中的模式不匹配,则该方法返回当前实例不变。您可以在此处查看。基于这些,以下代码查找匹配的文件夹名称并重命名它们。      string findFolderNamePattern = @"((?i)domain|.com(?-i))";      string replacement = "";          foreach (var myDirectory in myDirectories)      {          string newDirName = Regex.Replace(myDirectory, findFolderNamePattern, replacement);          Directory.Move(myDirectory, newDirName);      }

largeQ

由于您无法更改循环迭代器,您可以使用另一个数组,如下面的代码所示: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++;        }    }
打开App,查看更多内容
随时随地看视频慕课网APP