cách đọc tất cả các tệp bên trong thư mục cụ thể


103

Tôi muốn đọc tất cả các tệp xml bên trong một thư mục cụ thể trong c # .net

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

tôi có nhiều sản phẩm trong thư mục danh mục .. muốn lặp lại thư mục và phải lấy tất cả các tên tệp xml của sản phẩm.

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

5
Bạn đã thử những gì? Điều gì đã không hoạt động? Bạn đang gặp khó khăn ở đâu? tinyurl.com/so-hints
Oded

Câu trả lời:


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

Lưu ý ở trên sử dụng tính năng .NET 4.0; trong các phiên bản trước thay thế EnumerateFilesbằng GetFiles). Ngoài ra, hãy thay thế File.ReadAllTextbằng cách đọc tệp xml ưa thích của bạn - có thể XDocument, XmlDocumenthoặc một XmlReader.


1
'System.IO.Directory' không chứa một định nghĩa cho 'EnumerateFiles'
ram

4
"using System.IO;" Xuất sắc!! Tại sao nhiều người không cho cái này? Nó có thể rất gây phiền nhiễu để cố gắng tìm những gì mọi người đang nói về
user001

1
@ user001 vì thường IDE có thể tìm và thêm những thứ như vậy cho bạn - chỉ cần nhấn ctrl +.
Marc Gravell

1
@MarcGravell haha ​​thường :(
user001

Tôi nghĩ tốt hơn là sử dụng StringBuilder bên trong vòng lặp để nối nội dung của mọi tệp. sb.Append (File.ReadAllText (tệp));
e0x3 20/02/17

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

Nếu bạn đang muốn sao chép tất cả các tệp văn bản trong một thư mục để hợp nhất và sao chép sang một thư mục khác, bạn có thể làm điều này để đạt được điều đó:

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

Hãy thử cái này Nó đang làm việc cho tôi ..

Cú pháp là GetFiles(string path, string searchPattern);

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

Mã này sẽ trả về tất cả các tệp bên trong App_Datathư mục.

Tham số thứ hai . cho biết searchPattern với Phần mở rộng Tệp trong đó * đầu tiên là tên tệp và thứ hai dành cho định dạng của tệp hoặc Phần mở rộng tệp như (* .png - bất kỳ tên tệp nào có định dạng .png.


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

       }

1
Mặc dù giải pháp này có thể giải đáp vấn đề của OP, nhưng không nên chỉ viết câu trả lời chỉ có mã vì điều này có thể không hữu ích cho người dùng trong tương lai. Công phu một chút. Giải pháp này cung cấp những gì? Nó sẽ mang lại lợi ích như thế nào cho OP? vv
Geoff James

tôi vừa thấy mã ngày hôm qua nhưng đó không phải là bản sao dán
Rahul sahu

Tôi không ngụ ý rằng bạn sẽ sao chép / dán. Tôi đã cập nhật bình luận của mình. Tuy nhiên, bình luận của tôi vẫn có giá trị. Kỹ lưỡng.
Geoff James
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.