2011-12-27 4 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 и скопируйте его в массив String. Это нормально или есть более чистый метод?

+0

use [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.

Смежные вопросы