como ler todos os arquivos dentro de uma pasta particular

103

Quero ler todos os arquivos xml dentro de uma pasta específica em c # .net

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

Eu tenho vários produtos na pasta de categoria .. quero fazer um loop na pasta e deve obter todos os nomes de arquivo xml dos produtos.

XDocument doc2 = XDocument.Load((PG.SMNR.XMLDataSourceUtil.GetXMLFilePath(Locale, "Products/category/x1.xml")));
RAM
fonte
5
O que você tentou? O que não funcionou? Onde você está tendo dificuldades? tinyurl.com/so-hints
publicado em

Respostas:

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

Observe que o acima usa um recurso .NET 4.0; nas versões anteriores, substitua EnumerateFilespor GetFiles). Além disso, substitua File.ReadAllTextpela sua maneira preferida de ler arquivos xml - talvez XDocument, XmlDocumentou um XmlReader.

Marc Gravell
fonte
1
'System.IO.Directory' não contém uma definição para 'EnumerateFiles'
ram
4
"usando System.IO;" Brilhante!! Por que mais pessoas não podem dar isso? Pode ser tão chato tentar descobrir o que as pessoas estão falando
user001
1
@ user001 porque normalmente o IDE pode localizar e adicionar essas coisas para você - basta pressionar ctrl +.
Marc Gravell
1
@MarcGravell haha ​​normalmente :(
user001
Eu acho que é melhor usar StringBuilder dentro do loop para anexar o conteúdo de cada arquivo. sb.Append (File.ReadAllText (arquivo));
e0x3
25
using System.IO;

DirectoryInfo di = new DirectoryInfo(folder);
FileInfo[] files = di.GetFiles("*.xml");
Adi
fonte
14
using System.IO;

//...

  string[] files;

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

Você pode usar o DirectoryInfo.GetFilesmétodo:

FileInfo[] files = DirectoryInfo.GetFiles("*.xml");
Trydis
fonte
6

Se você deseja copiar todos os arquivos de texto em uma pasta para mesclar e copiar para outra pasta, pode fazer isso para conseguir:

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());
      }   
    }
  }
}
Gaurav Balyan
fonte
6

Tente isto Está funcionando para mim ..

A sintaxe é GetFiles(string path, string searchPattern);

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

Este código retornará todos os arquivos dentro da App_Datapasta.

O segundo parâmetro . indica o searchPattern com extensão de arquivo onde o primeiro * é para o nome do arquivo e o segundo é para o formato do arquivo ou extensão de arquivo como (* .png - qualquer nome de arquivo com formato .png.

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

       }
Rahul sahu
fonte
1
Embora esta solução possa responder ao problema do OP, é aconselhável não escrever apenas uma resposta apenas de código, pois isso pode não ser muito útil para futuros usuários. Elabore um pouco. O que esta solução oferece? Como isso vai beneficiar o OP? etc.
Geoff James
Acabei de ver o código de ontem, mas não é copiar e colar
Rahul sahu
Eu não estava sugerindo que você copiasse / colasse. Eu atualizei meu comentário. Mesmo assim, meu comentário continua válido. Elaborar.
Geoff James