Ricerca…


introduzione

Gestisce i file.

Sintassi

  • new System.IO.StreamWriter(string path)
  • new System.IO.StreamWriter(string path, bool append)
  • System.IO.StreamWriter.WriteLine(string text)
  • System.IO.StreamWriter.WriteAsync(string text)
  • System.IO.Stream.Close()
  • System.IO.File.ReadAllText(string path)
  • System.IO.File.ReadAllLines(string path)
  • System.IO.File.ReadLines(string path)
  • System.IO.File.WriteAllText(string path, string text)
  • System.IO.File.WriteAllLines(string path, IEnumerable<string> contents)
  • System.IO.File.Copy(string source, string dest)
  • System.IO.File.Create(string path)
  • System.IO.File.Delete(string path)
  • System.IO.File.Move(string source, string dest)
  • System.IO.Directory.GetFiles(string path)

Parametri

Parametro Dettagli
sentiero La posizione del file.
aggiungere Se il file esiste, true aggiungerà i dati alla fine del file (append), false sovrascriverà il file.
testo Testo da scrivere o archiviare.
contenuto Una raccolta di stringhe da scrivere.
fonte La posizione del file che si desidera utilizzare.
dest La posizione in cui si desidera un file.

Osservazioni

  • Assicurati sempre di chiudere gli oggetti Stream . Questo può essere fatto con un blocco using come mostrato sopra o chiamando manualmente myStream.Close() .
  • Assicurarsi che l'utente corrente disponga delle autorizzazioni necessarie sul percorso in cui si sta tentando di creare il file.
  • Le stringhe di Verbatim devono essere utilizzate quando si dichiara una stringa di percorso che include barre retroverse, ad esempio: @"C:\MyFolder\MyFile.txt"

Lettura da un file usando la classe System.IO.File

È possibile utilizzare la funzione System.IO.File.ReadAllText per leggere l'intero contenuto di un file in una stringa.

string text = System.IO.File.ReadAllText(@"C:\MyFolder\MyTextFile.txt");

Puoi anche leggere un file come una matrice di linee usando la funzione System.IO.File.ReadAllLines :

string[] lines = System.IO.File.ReadAllLines(@"C:\MyFolder\MyTextFile.txt");

Scrittura di righe su un file utilizzando la classe System.IO.StreamWriter

La classe System.IO.StreamWriter :

Implementa un TextWriter per scrivere caratteri su uno stream in una particolare codifica.

Utilizzando il metodo WriteLine , è possibile scrivere il contenuto riga per riga in un file.

Si noti l'uso della parola chiave using che si assicura che l'oggetto StreamWriter sia eliminato non appena esce dall'ambito e quindi il file viene chiuso.

string[] lines = { "My first string", "My second string", "and even a third string" };
using (System.IO.StreamWriter sw = new System.IO.StreamWriter(@"C:\MyFolder\OutputText.txt"))
{
    foreach (string line in lines)
    {
        sw.WriteLine(line);
    }
}

Si noti che StreamWriter può ricevere un secondo parametro bool nel suo costruttore, consentendo di Append a un file invece di sovrascrivere il file:

bool appendExistingFile = true;
using (System.IO.StreamWriter sw = new System.IO.StreamWriter(@"C:\MyFolder\OutputText.txt", appendExistingFile ))
{
    sw.WriteLine("This line will be appended to the existing file");
}

Scrivere su un file usando la classe System.IO.File

È possibile utilizzare la funzione System.IO.File.WriteAllText per scrivere una stringa in un file.

string text = "String that will be stored in the file";
System.IO.File.WriteAllText(@"C:\MyFolder\OutputFile.txt", text);

È anche possibile utilizzare la funzione System.IO.File.WriteAllLines che riceve un oggetto IEnumerable<String> come secondo parametro (anziché una singola stringa nell'esempio precedente). Ciò ti consente di scrivere contenuti da una serie di linee.

string[] lines = { "My first string", "My second string", "and even a third string" };
System.IO.File.WriteAllLines(@"C:\MyFolder\OutputFile.txt", lines);

Lettura lenta di un file riga per riga tramite un oggetto IEnumerable

Quando si lavora con file di grandi dimensioni, è possibile utilizzare il metodo System.IO.File.ReadLines per leggere tutte le righe da un file in un oggetto IEnumerable<string> . Questo è simile a System.IO.File.ReadAllLines , tranne per il fatto che non carica l'intero file in memoria in una volta, rendendolo più efficiente quando si lavora con file di grandi dimensioni.

IEnumerable<string> AllLines = File.ReadLines("file_name.txt", Encoding.Default);

Il secondo parametro di File.ReadLines è facoltativo. È possibile utilizzarlo quando è necessario specificare la codifica.

È importante notare che chiamare ToArray , ToList o un'altra funzione simile costringerà tutte le linee a essere caricate contemporaneamente, il che significa che il vantaggio dell'utilizzo di ReadLines è annullato. È meglio enumerare su IEnumerable utilizzando un ciclo foreach o LINQ se si utilizza questo metodo.

Crea file

Classe statica di file

Usando il metodo Create della classe statica File possiamo creare file. Il metodo crea il file nel percorso specificato, allo stesso tempo apre il file e ci dà il FileStream del file. Assicurati di chiudere il file dopo aver finito con esso.

EX1:

var fileStream1 = File.Create("samplePath");
/// you can write to the fileStream1
fileStream1.Close();

EX2:

using(var fileStream1 = File.Create("samplePath"))
{
    /// you can write to the fileStream1
}

EX3:

File.Create("samplePath").Close();

Classe FileStream

Ci sono molti sovraccarichi di questo costruttore di classi che è in realtà ben documentato qui . Di seguito l'esempio è per quello che copre le funzionalità più utilizzate di questa classe.

var fileStream2 = new FileStream("samplePath", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None);

È possibile controllare l'enumerazione per FileMode , FileAccess e FileShare da tali collegamenti. Ciò che in pratica significa sono i seguenti:

FileMode: risposte "Se il file deve essere creato? Aperto? Creare se non esiste, quindi aprire?" un po 'domande.

FileAccess: Answers "Devo essere in grado di leggere il file, scrivere sul file o entrambi?" un po 'domande.

FileShare: Answers "Gli altri utenti possono leggere, scrivere, ecc. Sul file mentre lo sto usando simultaneamente?" un po 'domande.

Copia il file

Classe statica di file

File classe statica dei File può essere facilmente utilizzata per questo scopo.

File.Copy(@"sourcePath\abc.txt", @"destinationPath\abc.txt");
File.Copy(@"sourcePath\abc.txt", @"destinationPath\xyz.txt");

Osservazione: con questo metodo, il file viene copiato, il che significa che verrà letto dall'origine e quindi scritto nel percorso di destinazione. Questo è un processo che consuma risorse, richiede tempo relativamente alla dimensione del file e può bloccare il programma se non si utilizzano i thread.

Sposta il file

Classe statica di file

La classe statica del file può essere facilmente utilizzata per questo scopo.

File.Move(@"sourcePath\abc.txt", @"destinationPath\xyz.txt");

Nota 1: modifica solo l'indice del file (se il file viene spostato nello stesso volume). Questa operazione non richiede tempo relativamente alla dimensione del file.

Remark2: impossibile eseguire l'override di un file esistente sul percorso di destinazione.

Cancella il file

string path = @"c:\path\to\file.txt";
File.Delete(path);

Mentre Delete non genera un'eccezione se il file non esiste, genererà un'eccezione, ad esempio se il percorso specificato non è valido o se il chiamante non dispone delle autorizzazioni richieste. Dovresti sempre inserire le chiamate su Delete nel blocco try-catch e gestire tutte le eccezioni previste. In caso di condizioni di gara possibili, avvolgere la logica all'interno dell'istruzione di blocco .

File e directory

Ottieni tutti i file nella directory

 var FileSearchRes = Directory.GetFiles(@Path, "*.*", SearchOption.AllDirectories);

Restituisce un array di FileInfo , che rappresenta tutti i file nella directory specificata.

Ottieni file con estensione specifica

 var FileSearchRes = Directory.GetFiles(@Path, "*.pdf", SearchOption.AllDirectories);

Restituisce un array di FileInfo , che rappresenta tutti i file nella directory specificata con l'estensione specificata.

Async scrive il testo in un file usando StreamWriter

// filename is a string with the full path
// true is to append        
using (System.IO.StreamWriter file = new System.IO.StreamWriter(filename, true))
{
   // Can write either a string or char array
   await file.WriteAsync(text);
}


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow