2011-12-27 26 views
6

puedo crear una matriz FileInfo como estoconvertir una matriz FileInfo en una matriz de cadenas 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()); 
      } 

Y esta matriz contiene todos los nombres de archivo en la carpeta = DirPath

pensé en bucle a través de la matriz FileInfo y copiarlo a una matriz de Cadenas. ¿Está bien o hay un método mucho más limpio?

+0

use [Directory.GetFiles()] (http://msdn.microsoft.com/en-us/library/ms143316.aspx) si necesita un archivo con ** ruta ** completa – Reniuz

+0

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

Respuesta

11

mediante LINQ:

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

Por otra parte, el uso de Directory puede obtener los nombres de archivos directamente.

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

hola no quiero incluir archivos en subdirectorios? ¿Cómo puedo eliminar los archivos del subdirectorio? – klijo

+1

@klijo - ¿Por qué usaste 'SearchOption.AllDirectories'? Eso es lo que hace. Utilice una sobrecarga que no utilice una enumeración 'SearchOption' o cámbiela a' SearchOption.TopDirectoryOnly'. – Oded

2

Si quieres ir a otro lado (convertir matriz de cadenas en FileInfo 's) se puede utilizar lo siguiente:

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

el LINQ es una gran soluction, pero para las personas que no lo hacen quieren utilizar LINQ, hice esta función:

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

prueba este

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

Si no desea que un filtro con la fecha, sólo tiene que convertir con el código de abajo

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

Si necesita la ruta completa del archivo, se puede utilizar en lugar de FullNameName.

Cuestiones relacionadas