comment lire tous les fichiers dans un dossier particulier

103

Je veux lire tous les fichiers xml dans un dossier particulier dans c # .net

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

J'ai plusieurs produits dans le dossier de catégorie .. veux boucler le dossier et devrait obtenir tous les noms de fichier xml de produit.

XDocument doc2 = XDocument.Load((PG.SMNR.XMLDataSourceUtil.GetXMLFilePath(Locale, "Products/category/x1.xml")));
RAM
la source
5
Qu'avez-vous essayé? Qu'est-ce qui n'a pas marché? Où rencontrez-vous des difficultés? tinyurl.com/so-hints
Oded

Réponses:

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

Notez que ce qui précède utilise une fonctionnalité .NET 4.0; dans les versions précédentes, remplacer EnumerateFilespar GetFiles). Remplacez également File.ReadAllTextpar votre méthode préférée de lecture des fichiers xml - peut-être XDocument, XmlDocumentou un fichier XmlReader.

Marc Gravell
la source
1
'System.IO.Directory' ne contient pas de définition pour 'EnumerateFiles'
ram
4
"using System.IO;" Brillant!! Pourquoi plus de gens ne peuvent-ils pas donner cela? Il peut être si ennuyeux d'essayer de trouver de quoi les gens parlent
user001
1
@ user001 car généralement l'EDI peut trouver et ajouter de telles choses pour vous - appuyez simplement sur ctrl +.
Marc Gravell
1
@MarcGravell haha ​​habituellement :(
user001
Je pense qu'il est préférable d'utiliser StringBuilder dans la boucle pour ajouter le contenu de chaque fichier. sb.Append (File.ReadAllText (fichier));
e0x3
25
using System.IO;

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

//...

  string[] files;

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

Essayez ceci Cela fonctionne pour moi.

La syntaxe est GetFiles(string path, string searchPattern);

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

Ce code renverra tous les fichiers dans le App_Datadossier.

Le deuxième paramètre . indique le searchPattern avec l'extension de fichier où le premier * correspond au nom du fichier et le second au format du fichier ou l'extension de fichier comme (* .png - tout nom de fichier au format .png.

Chandan Kumar
la source
6

Si vous souhaitez copier tous les fichiers texte dans un dossier pour les fusionner et les copier dans un autre dossier, vous pouvez le faire pour y parvenir:

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
la source
0
    using System.IO;
    string[] arr=Directory.GetFiles("folderpath","*.Fileextension");
      foreach(string file in arr)
       {

       }
Rahul sahu
la source
1
Bien que cette solution puisse répondre au problème de l'OP, il est conseillé de ne pas simplement écrire une réponse de code uniquement car cela peut ne pas être très utile pour les futurs utilisateurs. Élaborez un peu. Que propose cette solution? Comment cela profitera-t-il au PO? etc.
Geoff James
Je viens de voir le code d'hier mais ce n'est pas un copier-coller
Rahul sahu
Je n'impliquais pas que vous copieriez / colleriez. J'ai mis à jour mon commentaire. Pourtant, mon commentaire tient toujours. Élaborer.
Geoff James