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

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.


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

14
using System.IO;

//...

  string[] files;

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

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.



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

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

       }

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.