2013-07-12 34 views
14

我不知道我的错误是什么。如何使用GetFile()获取文件夹中所有文件的fileinfo?

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

回答

30

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);    
} 
+0

downvote的原因是什么? –

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到properway写入本地变量名fileInformations。使用Path.Combine来组合路径和文件名,而不是使用字符串组合,因为这将处理丢失/和其他路径问题。

相关问题