Guida introduttiva: Lettura e scrittura di file (HTML)

[ Questo articolo è rivolto agli sviluppatori per Windows 8.x e Windows Phone 8.x che realizzano app di Windows Runtime. Gli sviluppatori che usano Windows 10 possono vedere Documentazione aggiornata ]

Puoi leggere e scrivere un file usando l'oggetto StorageFile.

Prerequisiti

File usato negli esempi

Tutto il codice degli esempi è estratto dall'esempio di accesso a file e varia a seconda della variabile sampleFile globale dell'esempio. Questa variabile rappresenta il file (sample.dat) in cui vengono eseguite operazioni di scrittura e lettura negli esempi.

L'esempio di accesso a file crea il file sample.dat e archivia l'oggetto storageFile restituito, in questo modo:

Windows.Storage.ApplicationData.current.localFolder.createFileAsync("sample.dat",
    Windows.Storage.CreationCollisionOption.replaceExisting).then(function (file) {
        sampleFile = file;
    });

Nota  Per poter creare file nelle raccolte, devi dichiarare le funzionalità necessarie nel manifesto dell'app. Altre informazioni su accesso a file e funzionalità sono disponibili in Accesso ai file e autorizzazioni e in Dichiarazioni di funzionalità delle app (app di Windows Runtime).

 

Scrittura in un file

Questi passaggi illustrano come scrivere in un file se hai un file scrivibile e una classe storageFile che lo rappresenta.

Scrittura di testo in un file

Per scrivere testo nel file, chiama i metodi writeTextAsync della classe fileIO.

L'esempio di accesso a file illustra come chiamare writeTextAsync(file, contents) per scrivere testo arbitrario nella relativa variabile sampleFile in questo modo:

Windows.Storage.FileIO.writeTextAsync(sampleFile, "Swift as a shadow").then(function () {
    // Add code to do something after the text is written to the file
});

Anche se per i metodi writeTextAsync non è disponibile un valore restituito, puoi comunque usare then o done per dichiarare una funzione ed eseguire ulteriori attività dopo che il testo è stato scritto nel file, come illustrato nell'esempio.

Scrittura di byte in un file con un buffer

  1. Recupera un buffer dei byte che vuoi scrivere nel file.

    L'esempio di accesso a file chiama ad esempio convertStringToBinary per recuperare un buffer di byte sulla base di una stringa arbitraria, in questo modo:

    var buffer = Windows.Security.Cryptography.CryptographicBuffer.convertStringToBinary(
        'What fools these mortals be', Windows.Security.Cryptography.BinaryStringEncoding['']
    );
    
  2. Per scrivere i byte dal buffer al file, chiama il metodo writeBufferAsync della classe fileIO.

    L'esempio di accesso a file illustra come usare writeBufferAsync per scrivere byte da un buffer nella relativa variabile sampleFile, in questo modo:

    Windows.Storage.FileIO.writeBufferAsync(sampleFile, buffer).then(function () {
        // Add code to do something after the text is written to the file
    });
    

    Anche se per writeBufferAsync non è disponibile un valore restituito, puoi comunque usare then o done per dichiarare una funzione ed eseguire ulteriori attività dopo che il testo è stato scritto nel file, come illustrato nell'esempio.

Scrittura di testo in un file con un flusso transazionale

  1. Apri un flusso per il file chiamando il metodo storageFile.openTransactedWriteAsync. Questo metodo restituisce un flusso del contenuto del file al termine dell'operazione di apertura.

    L'esempio di accesso a file illustra come aprire un flusso per un file (sampleFile) chiamando il metodo storageFile.openTransactedWriteAsync, in questo modo:

    sampleFile.openTransactedWriteAsync().then(writeToStream);
    

    Assicurati di dichiarare una funzione, ad esempio writeToStream, per acquisire l'elemento transaction (tipo StorageStreamTransaction) in modo da poter scrivere nel file al termine del metodo, come illustrato in questo esempio:

    function writeToStream(transaction) {
        // Add code to use the stream to write to your file
    }
    
  2. Per aggiungere alla funzione writeToStream il codice per scrivere il testo nel file al completamento del metodo storageFile.openAsync, segui questi passaggi.

    1. Usa transaction per scrivere il testo nel flusso creando un nuovo oggetto dataWriter e chiamando il metodo dataWriter.writeString.

      L'esempio di accesso a file illustra come scrivere testo nel flusso, in questo modo:

      var dataWriter = new Windows.Storage.Streams.DataWriter(transaction.stream);
      dataWriter.writeString("Swift as a shadow");
      
    2. Salva il testo nel file e chiudi il flusso chiamando i metodi dataWriter.storeAsync e transaction.commitAsync.

      L'esempio di accesso a file illustra come salvare il testo nel file e chiudere il flusso, in questo modo:

      dataWriter.storeAsync().then(function () {
          transaction.commitAsync().done(function () {
              // Text in stream has been saved to the file
              transaction.close();
          });
      });
      

Per vedere questi esempi di codice nel contesto all'interno di funzioni, puoi scaricare l'esempio di accesso a file.

Lettura da un file

Questi passaggi illustrano come leggere da un file se hai un file leggibile e una classe storageFile che lo rappresenta.

Lettura di testo da un file

Per leggere testo dal file, chiama i metodi readTextAsync della classe fileIO.

L'esempio di accesso a file illustra come leggere testo da un file chiamando readTextAsync(file) per leggere dalla relativa variabile sampleFile, in questo modo:

Windows.Storage.FileIO.readTextAsync(sampleFile).then(function (contents) {
    // Add code to process the text read from the file
});

Puoi usare then o done per dichiarare una funzione che consenta di acquisire ed elaborare il testo letto dal file. Dopo il completamento del metodo readTextAsync, il testo viene passato a questa funzione come oggetto String (contents nell'esempio).

Lettura di byte da un file con un buffer

Per leggere i byte dal file nel buffer, chiama il metodo readBufferAsync della classe fileIO.

L'esempio di accesso a file illustra come leggere i byte in un buffer da un file chiamando readBufferAsync, in questo modo:

Windows.Storage.FileIO.readBufferAsync(sampleFile).then(function (buffer) {
    // Add code to process the text read from the file
});

Puoi usare then o done per dichiarare una funzione che consenta di acquisire ed elaborare i dati di buffer (tipo IBuffer) dopo il completamento del metodo readBufferAsync.

Ad esempio, l'esempio di accesso a file acquisisce il buffer e usa un oggetto dataReader per leggere la lunghezza del buffer, in questo modo:

Windows.Storage.FileIO.readBufferAsync(sampleFile).then(function (buffer) {
    var dataReader = Windows.Storage.Streams.DataReader.fromBuffer(buffer);
    var output = dataReader.readString(buffer.length);
});

Naturalmente leggere la lunghezza di buffer in questo modo può risultare poco utile. Ti invitiamo quindi a dare libero sfogo alla tua creatività per definire la modalità di elaborazione di buffer. I metodi disponibili della classe dataReader offrono utili spunti in proposito.

Lettura di testo da un file con un buffer

  1. Apri un flusso dal file chiamando il metodo storageFile.openAsync. Questo metodo restituisce un flusso del contenuto del file al termine dell'operazione di apertura.

    L'esempio di accesso a file illustra come aprire un flusso per un file (sampleFile) chiamando il metodo storageFile.openAsync, in questo modo:

    sampleFile.openAsync(Windows.Storage.FileAccessMode.readWrite).then(readFromStream);
    

    Assicurati di dichiarare una funzione (ad esempio readFromStream) per acquisire il flusso (tipo IRandomAccessStream) in modo da poter leggere dal file al completamento del metodo, come illustrato nell'esempio seguente:

    function readFromStream(readStream) {
        // Add code to use the stream to read text from your file
    }
    
  2. Per aggiungere alla funzione readFromStream il codice per leggere il testo dal file al completamento del metodo storageFile.openAsync, segui questi passaggi.

    1. Recupera un oggetto dataReader da leggere da readStream.

      L'esempio di accesso a file illustra come recuperare un dataReader, in questo modo:

      var dataReader = new Windows.Storage.Streams.DataReader(readStream);
      
    2. Leggi il testo chiamando i metodi dataReader.loadAsync e dataReader.readString.

      L'esempio di accesso a file illustra come leggere il testo, in questo modo:

      
      dataReader.loadAsync(readStream.size).done(function (numBytesLoaded) {
          var fileContent = dataReader.readString(numBytesLoaded);
          // Process text read from the file
          dataReader.close();
      });
      

Per vedere questi esempi di codice nel contesto all'interno di funzioni, puoi scaricare l'esempio di accesso a file.

Riepilogo e passaggi successivi

Dovrebbe ora esserti chiaro come eseguire operazioni di lettura e scrittura su un file se disponi di un oggetto storageFile che rappresenta il file.

Per altre informazioni sull'uso dei file immagine, vedi Come selezionare e visualizzare un'immagine o Come decodificare un'immagine e l'argomento relativo all'uso di un blob per salvare e caricare un esempio di contenuto.

Argomenti correlati

Accesso a dati e file

Guida introduttiva: Accesso a file con selezione file

Come selezionare e visualizzare un'immagine

Come decodificare un'immagine

Accesso ai file e autorizzazioni

Esempio di accesso a file

Uso di un blob per salvare e caricare un esempio di contenuto

Riferimenti

Windows.Storage.StorageFile class

Windows.Storage.Streams.DataReader class

Windows.Storage.Streams.DataWriter class