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.