2011-12-27 186 views
6

我創建一個FileInfo數組這樣轉換一個FileInfo數組轉換成字符串數組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()); 
      } 

而這個數組保存在文件夾中的所有文件名= DirPath

我想通過我們的FileInfo數組循環的並將其複製到一個字符串數組。這是好的還是有更清潔的方法?

+0

使用[Directory.GetFiles()](http://msdn.microsoft.com/en-us/library/ms143316.aspx)如果您需要帶有完整**路徑的文件 – Reniuz

+0

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

回答

11

使用LINQ:

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

另外,使用Directory你可以直接得到的文件名。

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

您好我不想在子目錄中包含文件?我怎樣才能刪除子目錄文件? – klijo

+1

@klijo - 你爲什麼使用'SearchOption.AllDirectories'?那就是這樣做的。要麼使用不使用'SearchOption'枚舉的重載,要麼將其更改爲'SearchOption.TopDirectoryOnly'。 – Oded

2

如果你想要去的其他方式(轉換字符串數組FileInfo中),您可以使用以下命令:

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

的LINQ是一個偉大的soluction,但對於誰做不是人要使用LINQ,我做了這個功能:

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

試試這個

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

如果你不想帶日期的過濾器,你可以簡單地用下面的代碼

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

轉換如果你需要的文件的完整路徑,可以使用FullName代替Name