C# Language
File e streaming I / O
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 bloccousing
come mostrato sopra o chiamando manualmentemyStream.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);
}