22

我不知道我的错误是什么。

FileInfo[] FileInformation = DirectoryInfo.GetFiles(textBoxPath.Text);  
for (int i = 0; i <= FileInformation.Length; i++)
{
    File.Move(FileInformation[i].DirectoryName, FileInformation[i].Directory + "File" + i);
}

VisualSudio 说这是错误:

System.IO.DirectoryInfo.GetFiles(textBoxPath.Text);

4

2 回答 2

58

DirectoryInfo不是静态类(您将它与公开静态方法的Directory混合)因此您应该创建它的实例:

var dir = new DirectoryInfo(textBoxPath.Text);
FileInfo[] files = dir.GetFiles();

另外我建议您Path.Combine用于生成FileInfo.MoveTo不需要源目录名称的新文件路径和方法:

for(int i = 0; i < files.Length; i++)
{
    FileInfo file = files[i];
    string destination = Path.Combine(file.DirectoryName, "File", i.ToString());
    file.MoveTo(destination);
} 

再想一想 - 如果您不需要关于文件的任何其他信息,除了名称,那么您可以只获取文件名,而无需FileInfo创建对象。使用DirectoryFile类的静态方法。这将更有效率:

string sourceDir = @"D:\Downloads";

string[] files = Directory.GetFiles(sourceDir);
for (int i = 0; i < files.Length; i++)
{
    string fileName = files[i];
    var destination = Path.Combine(sourceDir, "File", i.ToString());
    File.Move(fileName, destination);             
} 
于 2013-07-12T16:56:12.743 回答
3

使用以下内容:

    System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(textBoxPath.Text);
    System.IO.FileInfo[] fileInformations = dir.GetFiles();  
    for (int i = 0; i <= fileInformations.Length; i++)
    {
        System.IO.File.Move(fileInformations[i].DirectoryName, System.IO.Path.Combine(FileInformation[i].Directory, "File" + i));
    }

编辑: 将您重命名为FileInformation正确的方式来编写局部变量名称fileInformations。用于Path.Combine组合路径和文件名,而不是使用字符串组合,因为这将解决丢失 / 和其他路径问题。

于 2013-07-12T16:58:17.480 回答