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")));

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.


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");

14
using System.IO;

//...

  string[] files;

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


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());
      }   
    }
  }
}

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.


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

       }

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.