як читати всі файли в певній папці


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
Одед

Відповіді:


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, XmlDocumentабо an XmlReader.


1
'System.IO.Directory' не містить визначення для 'EnumerateFiles'
ram

4
"за допомогою System.IO;" Блискуче !! Чому більше людей не можуть цього дати?
Намагатись

1
@ user001, оскільки зазвичай IDE може знайти та додати такі речі для вас - просто натисніть ctrl +.
Marc Gravell

1
@MarcGravell ха-ха зазвичай :(
user001

Я думаю, що краще використовувати StringBuilder всередині циклу, щоб додати вміст кожного файлу. sb.Append (File.ReadAllText (файл));
e0x3

25
using System.IO;

DirectoryInfo di = new DirectoryInfo(folder);
FileInfo[] files = di.GetFiles("*.xml");


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
Незважаючи на те, що це рішення може відповісти на проблему ОП, рекомендується не просто писати відповідь лише для коду, оскільки це не може бути корисним майбутнім користувачам. Робіть трохи. Що забезпечує це рішення? Яким чином буде корисно для ОП? пр.
Джефф Джеймс

Я щойно бачив код вчора, але це не копіювальна паста
Рахул Саху,

Я не мав на увазі, що ви будете копіювати / вставляти. Я оновив свій коментар. І все-таки мій коментар все ще стоїть. Розробити.
Джефф Джеймс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.