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

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.


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

14
using System.IO;

//...

  string[] files;

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


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

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.


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

       }

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.