2011-12-27 13 views
6

creo un array di FileInfo come questoconverte una matrice di FileInfo in un array String 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()); 
      } 

E questo array contiene tutti i nomi dei file nella cartella = dirPath

ho pensato di loop attraverso l'array FileInfo e copiarlo su un array di stringhe. Va bene o c'è un metodo molto più pulito?

+0

utilizzare [Directory.GetFiles()] (http://msdn.microsoft.com/en-us/library/ms143316.aspx) se è necessario il file con percorso ** pieno ** – Reniuz

+0

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

risposta

11

utilizzando LINQ:

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

In alternativa, utilizzando Directory è possibile ottenere i nomi dei file direttamente.

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

ciao non voglio includere i file nelle sottodirectory? Come posso rimuovere i file della sottodirectory? – klijo

+1

@klijo - Perché hai usato 'SearchOption.AllDirectories'? Questo è quello che fa. Utilizzare un sovraccarico che non utilizza l'enumerazione 'SearchOption' o modificarlo in' SearchOption.TopDirectoryOnly'. – Oded

2

Se si vuole andare nella direzione opposta (convertire array di stringhe in FileInfo di) è possibile utilizzare il seguente:

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

il LINQ è un grande soluction, ma per le persone che non lo fanno vuole usare LINQ, ho fatto questa funzione:

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

provare questo

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

Se non si desidera un filtro con data, si può semplicemente convertire con il codice qui sotto

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

Se è necessario il percorso completo del file, è possibile utilizzare al posto di FullNameName.

Problemi correlati