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")));

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.


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");

14
using System.IO;

//...

  string[] files;

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

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.



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());
      }   
    }
  }
}

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

       }

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.