2011-12-27 50 views
6

tôi tạo ra một mảng FileInfo như thế nàychuyển đổi một mảng FileInfo vào một String mảng C#

try 
      { 
       DirectoryInfo Dir = new DirectoryInfo(DirPath); 
       FileInfo[] FileList = Dir.GetFiles("*.*", SearchOption.AllDirectories); 


       foreach (FileInfo FI in FileList) 
       { 
        Console.WriteLine(FI.FullName); 
       } 

      } 
      catch (Exception e) 
      { 
       Console.WriteLine(e.ToString()); 
      } 

Và mảng này chứa tất cả các tên tập tin trong thư mục = DirPath

tôi nghĩ Looping qua mảng FileInfo và sao chép nó vào một mảng String. Đây có phải là ok hoặc là có một phương pháp sạch hơn nhiều?

+0

sử dụng [Directory.GetFiles()] (http://msdn.microsoft.com/en-us/library/ms143316.aspx) nếu bạn cần tệp có ** đầy đủ ** đường dẫn – Reniuz

+0

var files = System.IO .Directory.GetFiles ("C: \\ test \\", "*. *"); –

Trả lời

11

Sử dụng LINQ:

FileList.Select(f => f.FullName).ToArray(); 

Ngoài ra, sử dụng Directory bạn có thể nhận tên tập tin trực tiếp.

string[] fileList = Directory.GetFiles(DirPath, "*.*", 
             SearchOption.AllDirectories); 
+0

hi i không muốn bao gồm các tập tin trong thư mục phụ? Làm thế nào tôi có thể loại bỏ các tập tin thư mục phụ? – klijo

+1

@klijo - Tại sao bạn sử dụng 'SearchOption.AllDirectories'? Đó là những gì mà. Hoặc sử dụng quá tải không sử dụng liệt kê 'SearchOption' hoặc thay đổi nó thành' SearchOption.TopDirectoryOnly'. – Oded

2

Nếu bạn muốn đi theo con đường khác (chuyển đổi chuỗi mảng vào FileInfo của) bạn có thể sử dụng như sau:

string[] files; 
var fileInfos = files.Select(f => new FileInfo(f)); 
List<FileInfo> infos = fileInfos.ToList<FileInfo>(); 
1

LINQ là một soluction lớn, nhưng đối với những người không muốn sử dụng LINQ, tôi đã thực hiện chức năng này:

static string BlastWriteFile(FileInfo file) 
    { 
     string blasfile = " "; 
     using (StreamReader sr = file.OpenText()) 
     { 
      string s = " "; 
      while ((s = sr.ReadLine()) != null) 
      { 
       blasfile = blasfile + s + "\n"; 
       Console.WriteLine(); 
      } 
     } 
     return blasfile; 
    } 
0

Hãy thử điều này một

DirectoryInfo directory = new DirectoryInfo("your path"); 
List<string> Files = (directory.GetFiles().Where(file => file.LastWriteTime >= date_value)).Select(f => f.Name).ToList(); 

Nếu bạn không muốn có một bộ lọc với ngày, bạn chỉ có thể chuyển đổi với mã dưới đây

List<string> logFiles = directory.GetFiles().Select(f => f.Name).ToList(); 

Nếu bạn cần đường dẫn đầy đủ của tập tin, bạn có thể sử dụng FullName thay vì Name.

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