как читать все файлы внутри определенной папки

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или файл XmlReader.

Марк Гравелл
источник
1
'System.IO.Directory' не содержит определения для 'EnumerateFiles'
баран
4
"используя System.IO;" Гениально !! Почему больше людей не могут этого дать? Попытки найти то, о чем говорят люди, могут быть настолько раздражающими,
user001
1
@ user001, потому что обычно IDE может найти и добавить такие вещи за вас - просто нажмите ctrl +.
Марк Грейвелл
1
@MarcGravell, ха-ха, обычно :(
user001
Я думаю, что лучше использовать StringBuilder внутри цикла для добавления содержимого каждого файла. sb.Append (File.ReadAllText (файл));
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

Попробуйте это У меня работает ..

Синтаксис 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, рекомендуется не просто писать ответ, состоящий только из кода, поскольку это может быть не очень полезно для будущих пользователей. Немного проработаем. Что дает это решение? Как это принесет пользу ОП? и т.д.
Джефф Джеймс
я только что видел вчера код, но это не копипаст
Рахул саху
Я не имел в виду, что вы скопируете / вставите. Я обновил свой комментарий. Тем не менее, мой комментарий остается в силе. Разрабатывать.
Джефф Джеймс