jak czytać wszystkie pliki w danym folderze

103

Chcę czytać wszystkie pliki xml w określonym folderze w c # .net

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

Mam wiele produktów w folderze kategorii .. chcę zapętlić folder i powinienem uzyskać wszystkie nazwy plików xml produktu.

XDocument doc2 = XDocument.Load((PG.SMNR.XMLDataSourceUtil.GetXMLFilePath(Locale, "Products/category/x1.xml")));
Baran
źródło
5
Czego próbowałeś? Co się nie udało? Gdzie masz trudności? tinyurl.com/so-hints
Oded

Odpowiedzi:

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

Zauważ, że powyższe wykorzystuje funkcję .NET 4.0; w poprzednich wersjach zastąpić EnumerateFilesz GetFiles). Należy także wymienić File.ReadAllTextz preferowanego sposobu odczytywania plików xml - być może XDocument, XmlDocumentalbo XmlReader.

Marc Gravell
źródło
1
„System.IO.Directory” nie zawiera definicji dla „EnumerateFiles”
ram
4
"using System.IO;" Znakomity!! Dlaczego więcej ludzi może tego nie dać? Próba znalezienia tego, o czym mówią ludzie, może być tak irytująca
user001,
1
@ user001, ponieważ zwykle IDE może znaleźć i dodać takie rzeczy dla Ciebie - po prostu naciśnij ctrl +.
Marc Gravell
1
@MarcGravell haha ​​zwykle :(
user001
Myślę, że lepiej jest użyć StringBuilder wewnątrz pętli, aby dołączyć zawartość każdego pliku. sb.Append (File.ReadAllText (plik));
e0x3
25
using System.IO;

DirectoryInfo di = new DirectoryInfo(folder);
FileInfo[] files = di.GetFiles("*.xml");
Adi
źródło
14
using System.IO;

//...

  string[] files;

  if (Directory.Exists(Path)) {
    files = Directory.GetFiles(Path, @"*.xml", SearchOption.TopDirectoryOnly);
    //...
Matthias Alleweldt
źródło
7

Spróbuj tego To działa dla mnie ..

Składnia to GetFiles(string path, string searchPattern);

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

Ten kod zwróci wszystkie pliki w App_Datafolderze.

Drugi parametr . wskazuje wzorzec wyszukiwania z rozszerzeniem pliku, gdzie pierwsza * oznacza nazwę pliku, a druga oznacza format pliku lub rozszerzenie pliku, np. (* .png - dowolna nazwa pliku w formacie .png.

Chandan Kumar
źródło
6

Jeśli chcesz skopiować wszystkie pliki tekstowe z jednego folderu w celu scalenia i skopiowania do innego folderu, możesz to zrobić, aby to osiągnąć:

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

       }
Rahul sahu
źródło
1
Chociaż to rozwiązanie może rozwiązać problem OP, zaleca się, aby nie pisać odpowiedzi obejmującej tylko kod, ponieważ może to nie być zbyt pomocne dla przyszłych użytkowników. Rozwiń trochę. Co zapewnia to rozwiązanie? Jakie korzyści odniesie z tego PO? itd.
Geoff James
właśnie widziałem wczorajszy kod, ale to nie jest kopia
wklejana
Nie sugerowałem, że chcesz skopiować / wkleić. Zaktualizowałem swój komentarz. Mimo to mój komentarz jest nadal aktualny. Opracować.
Geoff James