File e Stream I/O

 C Programming >> Programmazione C >  >> Tags >> File
File e Stream I/O

Gestisce i file.

# Lettura da un file utilizzando la classe System.IO.File

Puoi utilizzare System.IO.File.ReadAllText funzione 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 un array di righe utilizzando System.IO.File.ReadAllLines funzione:

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

# Leggere pigramente un file riga per riga tramite un IEnumerable

Quando lavori con file di grandi dimensioni, puoi utilizzare System.IO.File.ReadLines metodo per leggere tutte le righe da un file in un IEnumerable<string> . È 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. Puoi usarlo quando è necessario specificare la codifica.

È importante notare che chiamando ToArray , ToList o un'altra funzione simile forzerà il caricamento di tutte le righe contemporaneamente, il che significa che il vantaggio dell'utilizzo di ReadLines è annullato. È meglio enumerare sopra il IEnumerable utilizzando un foreach loop o LINQ se si utilizza questo metodo.

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

Il System.IO.StreamWriter classe:

Implementa un TextWriter per scrivere caratteri in un flusso con una codifica particolare.

Usando il WriteLine metodo, puoi scrivere il contenuto riga per riga in un file.

Nota l'uso del using parola chiave che assicura che l'oggetto StreamWriter venga eliminato non appena esce dall'ambito e quindi il file venga 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);
    }
}

Nota che StreamWriter può ricevere un secondo bool parametro nel suo costruttore, consentendo di Append in 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");
}

# Scrittura in un file utilizzando la classe System.IO.File

Puoi utilizzare System.IO.File.WriteAllText funzione 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);

Puoi anche utilizzare System.IO.File.WriteAllLines funzione che riceve un IEnumerable<String> come secondo parametro (al contrario di una singola stringa nell'esempio precedente). Ciò ti consente di scrivere contenuto da un array di righe.

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

# Copia file

Classe statica file

File la classe statica 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 richiede risorse, richiederebbe tempo relativo alla dimensione del file e può causare il blocco del programma se non utilizzi i thread.

# Async scrive testo su 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);
}

# Crea file

Classe statica file

Usando Create metodo del File classe statica possiamo creare file. Il metodo crea il file nel percorso indicato, allo stesso tempo apre il file e ci fornisce il FileStream del file. Assicurati di chiudere il file una volta terminato.

es1:

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

es2:

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

es3:

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

Classe FileStream

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

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

Puoi controllare le enumerazioni per FileMode , FileAccess e FileShare da quei collegamenti. Ciò che fondamentalmente significano sono i seguenti:

Modalità file: Risposte "Il file dovrebbe essere creato? aperto? creare se non esiste, quindi aprire?" tipo domande.

Accesso ai file: Risposte "Dovrei essere in grado di leggere il file, scrivere sul file o entrambi?" tipo domande.

FileShare: Risposte "Gli altri utenti dovrebbero essere in grado di leggere, scrivere ecc. sul file mentre lo sto utilizzando contemporaneamente?" tipo domande.

# Sposta file

Classe statica file

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

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

Osservazione1: Modifica solo l'indice del file (se il file viene spostato nello stesso volume). Questa operazione non richiede tempo relativo alla dimensione del file.

Osservazione2: Impossibile sovrascrivere un file esistente nel percorso di destinazione.

# Elimina file

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

Mentre Delete non genera eccezioni se il file non esiste, genererà eccezioni, ad es. se il percorso specificato non è valido o il chiamante non dispone delle autorizzazioni richieste. Dovresti sempre eseguire il wrapping delle chiamate a Delete all'interno del blocco try-catch e gestisci tutte le eccezioni previste. In caso di possibili condizioni di gara, avvolgi la logica all'interno dell'istruzione lock .

# 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.

# 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
percorso Il percorso del file.
aggiungi Se il file esiste, true aggiungerà i dati alla fine del file (append), false sovrascriverà il file.
testo Testo da scrivere o memorizzare.
contenuti Una raccolta di stringhe da scrivere.
fonte Il percorso del file che desideri utilizzare.
destinazione La posizione in cui vuoi che vada un file.

# Osservazioni

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