cómo leer todos los archivos dentro de una carpeta particular

103

Quiero leer todos los archivos xml dentro de una carpeta en particular en c # .net

XDocument doc2 = XDocument.Load((PG.SMNR.XMLDataSourceUtil.GetXMLFilePath(Locale, "Products/category/product.xml")));

Tengo varios productos en la carpeta de categorías ... quiero recorrer la carpeta y debería obtener todos los nombres de archivo xml de productos.

XDocument doc2 = XDocument.Load((PG.SMNR.XMLDataSourceUtil.GetXMLFilePath(Locale, "Products/category/x1.xml")));
RAM
fuente
5
¿Qué has probado? ¿Qué no funcionó? ¿Dónde tienes dificultades? tinyurl.com/so-hints
Oded

Respuestas:

247
using System.IO;
...
foreach (string file in Directory.EnumerateFiles(folderPath, "*.xml"))
{
    string contents = File.ReadAllText(file);
}

Tenga en cuenta que lo anterior utiliza una función .NET 4.0; en versiones anteriores reemplazar EnumerateFilescon GetFiles). Además, reemplace File.ReadAllTextcon su forma preferida de la lectura de archivos xml - tal vez XDocument, XmlDocumento un XmlReader.

Marc Gravell
fuente
1
'System.IO.Directory' no contiene una definición para 'EnumerateFiles'
ram
4
"usando System.IO;" ¡¡Brillante!! ¿Por qué más personas no pueden dar esto? Puede ser muy molesto intentar encontrar de qué habla la gente
user001
1
@ user001 porque, por lo general, el IDE puede encontrar y agregar esas cosas por usted, simplemente presione ctrl +.
Marc Gravell
1
@MarcGravell jaja normalmente :(
user001
Creo que es mejor usar StringBuilder dentro del ciclo para agregar el contenido de cada archivo. sb.Append (File.ReadAllText (archivo));
e0x3
25
using System.IO;

DirectoryInfo di = new DirectoryInfo(folder);
FileInfo[] files = di.GetFiles("*.xml");
Adi
fuente
14
using System.IO;

//...

  string[] files;

  if (Directory.Exists(Path)) {
    files = Directory.GetFiles(Path, @"*.xml", SearchOption.TopDirectoryOnly);
    //...
Matthias Alleweldt
fuente
6

Si está buscando copiar todos los archivos de texto en una carpeta para fusionarlos y copiarlos en otra carpeta, puede hacer esto para lograrlo:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace HowToCopyTextFiles
{
  class Program
  {
    static void Main(string[] args)
    {
      string mydocpath=Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);     
      StringBuilder sb = new StringBuilder();
      foreach (string txtName in Directory.GetFiles(@"D:\Links","*.txt"))
      {
        using (StreamReader sr = new StreamReader(txtName))
        {
          sb.AppendLine(txtName.ToString());
          sb.AppendLine("= = = = = =");
          sb.Append(sr.ReadToEnd());
          sb.AppendLine();
          sb.AppendLine();   
        }
      }
      using (StreamWriter outfile=new StreamWriter(mydocpath + @"\AllTxtFiles.txt"))
      {    
        outfile.Write(sb.ToString());
      }   
    }
  }
}
gaurav balyan
fuente
6

Prueba esto. Me está funcionando.

La sintaxis es GetFiles(string path, string searchPattern);

var filePath = Server.MapPath("~/App_Data/");
string[] filePaths = Directory.GetFiles(@filePath, "*.*");

Este código devolverá todos los archivos dentro de la App_Datacarpeta.

El segundo parámetro . indica el patrón de búsqueda con extensión de archivo donde el primer * es para el nombre del archivo y el segundo es para el formato del archivo o la extensión del archivo como (* .png - cualquier nombre de archivo con formato .png.

Chandan Kumar
fuente
0
    using System.IO;
    string[] arr=Directory.GetFiles("folderpath","*.Fileextension");
      foreach(string file in arr)
       {

       }
Rahul sahu
fuente
1
Si bien esta solución puede responder al problema del OP, se recomienda no escribir solo una respuesta de solo código, ya que esto puede no ser muy útil para los futuros usuarios. Elabora un poco. ¿Qué aporta esta solución? ¿Cómo beneficiará al OP? etc.
Geoff James
Acabo de ver el código de ayer, pero eso no es copiar y pegar
Rahul sahu
No estaba insinuando que copiarías / pegarías. Actualicé mi comentario. Aún así, mi comentario sigue en pie. Elaborar.
Geoff James