English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

FileInfo di C#

 In questo esempio, imparerai come utilizzare la classe FileInfo per eseguire operazioni di lettura/scrittura su file fisici.

La classe FileInfo fornisce le stesse funzionalità della classe statica File, ma puoi avere più controllo sulle operazioni di lettura/scrittura del file scrivendo manualmente il codice per leggere o scrivere byte dal file.

Proprietà e metodi importanti di FileInfo:

ProprietàUtilizzo
DirectoryOttiene un'istanza del directory padre.
DirectoryNameOttiene una stringa che rappresenta il percorso completo della directory.
ExistsOttiene un valore che indica se il file esiste.
ExtensionOttiene una stringa che rappresenta la parte di estensione del file.
FullNameOttiene il percorso completo del file o della directory.
IsReadOnlyOttiene o imposta un valore che determina se il file corrente è in sola lettura.
LastAccessTimeOttiene o imposta l'ora dell'ultimo accesso al file o alla directory corrente.
LastWriteTimeOttiene o imposta l'ora dell'ultima scrittura del file o della directory corrente.
LengthOttiene la dimensione corrente del file (in byte).
NameOttiene il nome del file.
MetodoUtilizzo
AppendTextCrea un StreamWriter per aggiungere testo al file rappresentato da questa istanza di FileInfo.
CopyToCopia il file esistente in un nuovo file senza sovrascrivere il file esistente.
CreateCrea un file.
CreateTextCrea un StreamWriter per scrivere in un nuovo file di testo.
DecryptDecifra il file cifrato dall'account corrente utilizzando il metodo Encrypt.
DeleteElimina il file specificato.
EncryptCifra il file in modo che solo gli account utilizzati per cifrare il file possano decifrare il file.
GetAccessControlOttiene un oggetto FileSecurity che incapsula l'elenco di controllo degli accessi (ACL) del file specificato.
MoveToSposta il file specificato in una nuova posizione e fornisce l'opzione di nome del nuovo file.
OpenApre un file con lo specificato FileMode.
OpenReadCrea un FileStream in sola lettura.
OpenTextCrea un StreamReader con codifica UTF8, che può leggere un file di testo esistente.
OpenWriteCrea un FileStream in sola scrittura.
ReplaceSostituisce il contenuto del file specificato con il file descritto dall'oggetto FileInfo corrente, elimina il file originale e crea una copia di backup del file sostituito.
ToStringRestituisce il percorso come stringa.

L'esempio seguente mostra come leggere manualmente byte da un file e convertirli in stringa utilizzando l'encoding UTF8:}}

Esempio: lettura di un file utilizzando la classe FileInfo

//Create FileInfo object for specified path            
FileInfo fi = new FileInfo(@"D:\DummyFile.txt");
//Open file for read\write
FileStream fs = fi.Open(FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite); 
//Creare un array di byte della stessa dimensione del FileStream
byte[] fileBytes = new byte[fs.Length];
//Definire il contatore per verificare quanti byte leggere. Decrementare il contatore ogni volta che si legge un byte
int numBytesToRead = (int)fileBytes.Length;
//Contatore che indica il numero di byte già letti
int numBytesRead = 0;
//Iterazione fino a quando non si sono letti tutti i byte dal FileStream
while (numBytesToRead > 0)
{
    int n = fs.Read(fileBytes, numBytesRead, numBytesToRead);
        
    if (n == 0)
        break;
    numBytesRead += n;
    numBytesToRead -= n;
}
//Dopo aver letto tutti i byte dal FileStream, è possibile convertirli in stringa utilizzando l'encoding UTF8
string filestring = Encoding.UTF8.GetString(fileBytes);

Come mostrato nel codice sopra, è necessario scrivere molto codice per leggere/scrivere stringhe da FileStream. Tuttavia, con StreamReader e StreamWriter è possibile completare facilmente le stesse operazioni di lettura/scrittura.

L'esempio seguente mostra come StreamReader rende facile leggere stringhe da un file:

Esempio: lettura di un file utilizzando StreamReader

//Create FileInfo object for specified path            
FileInfo fi = new FileInfo(@"D:\DummyFile.txt");
        
//Open file for read\write
FileStream fs = fi.Open(FileMode.OpenOrCreate, FileAccess.Read, FileShare.Read); 
//Creazione dell'oggetto StreamReader passando l'oggetto FileStream da operare
StreamReader sr = new StreamReader(fs);
//Utilizzo del metodo ReadToEnd per leggere tutto il contenuto del file
string fileContent = sr.ReadToEnd();
//Chiusura dell'oggetto StreamReader
sr.Close();
fs.Close();

Note that fi.Open() has three parameters:

  • The first parameter is FileMode, used to create and open a file (if the file does not exist);

  • The second parameter FileAccess represents read operations;

  • The third parameter is to share the file with other users for reading when opening the file.

The following example shows how StreamWriter makes it easier to write strings to a file:

Example: Use StreamWriter to write text to a file

//Create FileInfo object for specified path            
FileInfo fi = new FileInfo(@"D:\DummyFile.txt");
        
//Open file for read\write
FileStream fs = fi.Open(FileMode.OpenOrCreate, FileAccess.Write, FileShare.Read); 
//Create StreamWriter object to write string to FileStream
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine("Un'altra riga proveniente da streamwriter");
sw.Close();

You cannot read and write to the same FileStream object at the same time. If you are already reading the file, please create a separate FileStream object to write to the same file as follows:

Example: StreamReader and StreamWriter

//Create FileInfo object for DummyFile.txt
FileInfo fi = new FileInfo(@"D:\DummyFile.txt");
//Open DummyFile.txt for read operation
FileStream fsToRead = fi.Open(FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite); 
//Open DummyFile.txt for write operation
FileStream fsToWrite = fi.Open(FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite); 
          
//Get StreamWriter
StreamReader sr = new StreamReader(fsToRead);
//Use the StreamReader object to read all text
string fileContent = sr.ReadToEnd();
sr.Close();
//Get StreamWriter
StreamWriter sw = new StreamWriter(fsToWrite);
//Scrivi alcune parole con StreamWriter
sw.WriteLine("Un'altra riga proveniente da streamwriter");
sw.Close();
//Chiudi tutti gli oggetti Stream
fsToRead.Close();
fsToWrite.Close();

Pertanto, è possibile utilizzare le classi FileInfo, StreamReader e StreamWriter per leggere / scrivere contenuti da file fisici.