为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
莫回无 2021-12-05 17:04:39
为了重命名文件夹的名称,我使用了以下代码。当我调试它时,每个返回一个正确的值,它识别具有模式的文件夹但它不能重命名文件夹名称!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);}
查看完整描述

3 回答

?
波斯汪

TA贡献1811条经验 获得超4个赞

在这种情况下,您似乎在更改字符串而不是在任何地方重命名文件夹。您需要遍历并重命名已识别的文件夹,如下所示:


foreach(var myDirectory in myDirectories)

{

    new DirectoryInfo(myDirectory).MoveTo(Regex.Replace(myDirectory, findFolderNamePattern, replacement));

}

这应该重命名每个文件夹,因为它标识了它。


查看完整回答
反对 回复 2021-12-05
?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

我认为有两点需要考虑:


迭代变量不能改变。

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

      }


查看完整回答
反对 回复 2021-12-05
?
largeQ

TA贡献2039条经验 获得超7个赞

由于您无法更改循环迭代器,您可以使用另一个数组,如下面的代码所示:


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

        }

    }


查看完整回答
反对 回复 2021-12-05
  • 3 回答
  • 0 关注
  • 183 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信