我正在尝试重命名目录,但得到两个错误,如何解决这个错误?

时间:2014-10-25 20:51:10

标签: c# .net winforms

我创建了这个方法:

private void DeletionCheck()
{
    DirectoryInfo listDirs = new DirectoryInfo(MainDirectory);
    var dirs = listDirs.EnumerateDirectories().OrderBy(d => d.Name);

    for (var directoryIndex = 1; directoryIndex <= dirs.Count(); directoryIndex++)
    {
        if (directoryIndex != dirs[directoryIndex - 1].Name)
        {
            Directory.Move(listDirs[directoryIndex - 1], directoryIndex);
        }
    }
}

第一个错误就在这一行:

dirs[directoryIndex - 1]

错误:

  

错误60无法将[]索引应用于“System.Linq.IOrderedEnumerable”类型的表达式

第二个错误出现在这一行:

listDirs[directoryIndex - 1]

错误:

  

错误61无法将带有[]的索引应用于“System.IO.DirectoryInfo”类型的表达式

我想在这个方法中做的是检查MainDirectory中的sun目录是否被删除,然后按名称对所有其他目录进行排序,并重命名它们以按名称重新排序。

因为所有子目录名都以数字结尾,例如:

Event 000001
Event 000002

因此,要解析每个子目录的编号,并使用目录名称的数字部分进行排序和排序。

1 个答案:

答案 0 :(得分:4)

使用列表或数组而不是没有索引器的(未执行的)LINQ查询:

var dirs = listDirs.EnumerateDirectories().OrderBy(d => d.Name).ToList();

请注意,大多数LINQ方法都是懒惰执行的(也称为延迟执行)。这意味着每次使用foreach或隐式执行ToListCount(!)的方法时,都会再次评估查询。

更新:我想您还想将目录名与之前的目录名进行比较。所以改变这个

if (directoryIndex != dirs[directoryIndex - 1].Name)

if (dirs[directoryIndex].Name != dirs[directoryIndex - 1].Name)

您不能也不想将int与目录名进行比较。

同样适用于需要目标目录而不是索引的Directory.Move。所以改变

 Directory.Move(listDirs[directoryIndex - 1], directoryIndex);

to(也使用Directory.Info.FullName

 Directory.Move(listDirs[directoryIndex - 1].FullName, listDirs[directoryIndex].FullName);