2013-07-12 34 views

Trả lời

30

DirectoryInfo không phải là một lớp tĩnh (bạn trộn nó với Directory mà thấy nhiều phương pháp tĩnh) do đó bạn nên tạo thể hiện của nó:

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

Ngoài ra tôi đề nghị bạn sử dụng Path.Combine để tạo đường dẫn tệp mới và phương pháp FileInfo.MoveTo, không yêu cầu nguồn gốc e tên thư mục:

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

hơn Một suy nghĩ - nếu bạn không cần bất kỳ thông tin bổ sung về các tập tin, bên cạnh tên, sau đó bạn có thể nhận được tên tập tin duy nhất, mà không FileInfo đối tượng sáng tạo. Sử dụng các phương pháp tĩnh của các lớp học DirectoryFile. Đó sẽ là hiệu quả hơn:

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

Lý do của downvote là gì? –

3

Sử dụng như sau:

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

EDIT: đổi tên của bạn FileInformation đến properway để viết tên biến địa phương fileInformations. Đã sử dụng Path.Combine để kết hợp các đường dẫn và tên tệp thay vì sử dụng kết hợp chuỗi, vì điều này sẽ giải quyết vấn đề thiếu/và các đường dẫn khác.

Các vấn đề liên quan