วิธีอ่านไฟล์ทั้งหมดภายในโฟลเดอร์เฉพาะ


103

ฉันต้องการอ่านไฟล์ xml ทั้งหมดภายในโฟลเดอร์เฉพาะใน c # .net

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

ฉันมีผลิตภัณฑ์หลายรายการในโฟลเดอร์หมวดหมู่ .. ต้องการวนซ้ำโฟลเดอร์และควรได้รับชื่อไฟล์ xml ของผลิตภัณฑ์ทั้งหมด

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

5
คุณได้ลองทำอะไรบ้าง? อะไรไม่ได้ผล? คุณมีปัญหาที่ไหน tinyurl.com/so-hints
Oded

คำตอบ:


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

หมายเหตุข้างต้นใช้คุณสมบัติ. NET 4.0; ในเวอร์ชันก่อนหน้าแทนที่EnumerateFilesด้วยGetFiles) นอกจากนี้แทนที่File.ReadAllTextด้วยวิธีการที่คุณต้องการอ่านไฟล์ XML - บางทีXDocument, หรือXmlDocumentXmlReader


1
'System.IO.Directory' ไม่มีคำจำกัดความสำหรับ 'EnumerateFiles'
ราม

4
"ใช้ System.IO;" แจ่ม !! ทำไมคนจำนวนมากไม่สามารถให้สิ่งนี้ได้? การพยายามค้นหาสิ่งที่ผู้คนพูดถึงอาจเป็นเรื่องที่น่ารำคาญ
user001

1
@ user001 เพราะโดยปกติแล้ว IDE จะค้นหาและเพิ่มสิ่งต่างๆให้คุณได้เพียงแค่กด ctrl +
Marc Gravell

1
@MarcGravell ฮ่าฮ่าโดยปกติ :(
user001

ฉันคิดว่าควรใช้ StringBuilder ภายในลูปเพื่อต่อท้ายเนื้อหาของไฟล์ทุกไฟล์ sb.Append (File.ReadAllText (ไฟล์));
e0x3



7

ลองนี้มันใช้งานได้สำหรับฉัน ..

ไวยากรณ์คือ GetFiles(string path, string searchPattern);

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

รหัสนี้จะส่งคืนไฟล์ทั้งหมดในApp_Dataโฟลเดอร์

พารามิเตอร์ที่สอง ระบุ searchPattern ที่มีนามสกุลไฟล์โดยที่ * ตัวแรกเป็นชื่อไฟล์และตัวที่สองใช้สำหรับรูปแบบของไฟล์หรือนามสกุลไฟล์เช่น (* .png - ชื่อไฟล์ใด ๆ ที่มีรูปแบบ. png



6

หากคุณต้องการคัดลอกไฟล์ข้อความทั้งหมดในโฟลเดอร์เดียวเพื่อรวมและคัดลอกไปยังโฟลเดอร์อื่นคุณสามารถทำได้เพื่อให้บรรลุ:

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
ในขณะที่โซลูชันนี้อาจตอบปัญหาของ OP ได้ แต่ขอแนะนำว่าอย่าเพียงแค่เขียนคำตอบแบบโค้ดเท่านั้นเนื่องจากอาจไม่เป็นประโยชน์กับผู้ใช้ในอนาคต บรรจงเล็กน้อย. โซลูชันนี้ให้อะไร? จะเป็นประโยชน์ต่อ OP อย่างไร? ฯลฯ
Geoff James

ฉันเพิ่งเห็นรหัสเมื่อวานนี้ แต่นั่นไม่ใช่การคัดลอกวาง
Rahul sahu

ฉันไม่ได้หมายความว่าคุณจะคัดลอก / วาง ฉันได้อัปเดตความคิดเห็นของฉันแล้ว ถึงกระนั้นความคิดเห็นของฉันก็ยังคงยืนอยู่ ประณีต.
Geoff James
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.