wie man alle Dateien in einem bestimmten Ordner liest

103

Ich möchte alle XML-Dateien in einem bestimmten Ordner in c # .net lesen

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

Ich habe mehrere Produkte in Kategorie Ordner .. möchte den Ordner schleifen und sollte alle Produkt-XML-Dateinamen erhalten.

XDocument doc2 = XDocument.Load((PG.SMNR.XMLDataSourceUtil.GetXMLFilePath(Locale, "Products/category/x1.xml")));
RAM
quelle
5
Was hast du versucht? Was hat nicht funktioniert? Wo hast du Schwierigkeiten? tinyurl.com/so-hints
Oded

Antworten:

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

Beachten Sie, dass oben eine .NET 4.0-Funktion verwendet wird. in früheren Versionen ersetzen EnumerateFilesdurch GetFiles). Auch ersetzen File.ReadAllTextmit Ihrer bevorzugten Art und Weise XML - Dateien zu lesen - vielleicht XDocument, XmlDocumentoder ein XmlReader.

Marc Gravell
quelle
1
'System.IO.Directory' enthält keine Definition für 'EnumerateFiles'
RAM
4
"using System.IO;" Brillant!! Warum können mehr Menschen das nicht geben? Es kann so ärgerlich sein, zu versuchen, herauszufinden, worüber die Leute sprechen
user001
1
@ user001, da die IDE normalerweise solche Dinge für Sie finden und hinzufügen kann - drücken Sie einfach Strg +.
Marc Gravell
1
@MarcGravell haha ​​normalerweise :(
user001
Ich denke, es ist besser, StringBuilder innerhalb der Schleife zu verwenden, um den Inhalt jeder Datei anzuhängen. sb.Append (File.ReadAllText (Datei));
e0x3
25
using System.IO;

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

//...

  string[] files;

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

Sie können die DirectoryInfo.GetFilesMethode verwenden:

FileInfo[] files = DirectoryInfo.GetFiles("*.xml");
trydis
quelle
6

Wenn Sie alle Textdateien in einen Ordner kopieren möchten, um sie zusammenzuführen und in einen anderen Ordner zu kopieren, können Sie dies tun, um Folgendes zu erreichen:

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
quelle
6

Versuchen Sie dies Es funktioniert für mich ..

Die Syntax lautet GetFiles(string path, string searchPattern);

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

Dieser Code gibt alle Dateien im App_DataOrdner zurück.

Der zweite Parameter . Gibt das Suchmuster mit Dateierweiterung an, wobei das erste * für den Dateinamen und das zweite für das Format der Datei oder die Dateierweiterung wie (* .png - ein beliebiger Dateiname mit dem .png-Format) steht.

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

       }
Rahul sahu
quelle
1
Diese Lösung kann zwar das Problem des OP lösen, es wird jedoch empfohlen, nicht nur eine Nur-Code-Antwort zu schreiben, da dies für zukünftige Benutzer möglicherweise nicht sehr hilfreich ist. Arbeiten Sie ein wenig aus. Was bietet diese Lösung? Wie wird es dem OP zugute kommen? usw.
Geoff James
Ich habe gerade gestern Code gesehen, aber das ist keine Kopie einfügen
Rahul Sahu
Ich habe nicht impliziert, dass Sie kopieren / einfügen würden. Ich habe meinen Kommentar aktualisiert. Trotzdem steht mein Kommentar noch. Erarbeiten.
Geoff James