come leggere tutti i file all'interno di una cartella particolare


103

Voglio leggere tutti i file xml all'interno di una particolare cartella in c # .net

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

ho più prodotti nella cartella della categoria .. voglio eseguire il loop della cartella e dovrei ottenere tutti i nomi dei file xml del prodotto.

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

5
Cosa hai provato? Cosa non ha funzionato? Dove hai difficoltà? tinyurl.com/so-hints
Oded

Risposte:


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

Notare che quanto sopra utilizza una funzionalità .NET 4.0; nelle versioni precedenti sostituire EnumerateFilescon GetFiles). Inoltre, sostituire File.ReadAllTextcon il tuo modo preferito di lettura di file XML - forse XDocument, XmlDocumento un XmlReader.


1
'System.IO.Directory' non contiene una definizione per 'EnumerateFiles'
ram

4
"using System.IO;" Brillante!! Perché più persone non possono dare questo? Può essere così fastidioso cercare di trovare ciò di cui parlano le persone
user001

1
@ user001 perché di solito l'IDE può trovare e aggiungere queste cose per te - basta premere ctrl +.
Marc Gravell

1
@ MarcGravell haha ​​di solito :(
user001

Penso che sia meglio usare StringBuilder all'interno del ciclo per aggiungere il contenuto di ogni file. sb.Append (File.ReadAllText (file));
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 stai cercando di copiare tutti i file di testo in una cartella per unirli e copiarli in un'altra cartella, puoi farlo per ottenere ciò:

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

Prova questo Funziona per me ..

La sintassi è GetFiles(string path, string searchPattern);

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

Questo codice restituirà tutti i file all'interno della App_Datacartella.

Il secondo parametro . indica il pattern di ricerca con estensione file dove il primo * è per il nome del file e il secondo è per il formato del file o l'estensione del file come (* .png - qualsiasi nome di file con formato .png.


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

       }

1
Sebbene questa soluzione possa rispondere al problema dell'OP, si consiglia di non scrivere solo una risposta di solo codice in quanto potrebbe non essere molto utile per gli utenti futuri. Elaborare un po '. Cosa fornisce questa soluzione? In che modo trarrà vantaggio dal PO? ecc.
Geoff James,

Ho appena visto il codice di ieri ma quella non è una copia incolla
Rahul sahu

Non stavo insinuando che avresti copiato / incollato. Ho aggiornato il mio commento. Tuttavia, il mio commento è ancora valido. Elaborare.
Geoff James,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.