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
Conoscere le tecniche di programmazione asincrona per le app di Windows Runtime che usano JavaScript
Per informazioni su come scrivere app asincrone, vedi Guida introduttiva: Uso delle promesse in JavaScript.
Sapere come recuperare il file da cui leggere e/o in cui scrivere
Per informazioni su come recuperare un file chiamando un'utilità di selezione file, vedi Guida introduttiva: Accesso a file con selezione file.
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
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[''] );
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
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'elementotransaction
(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 }
Per aggiungere alla funzione
writeToStream
il codice per scrivere il testo nel file al completamento del metodo storageFile.openAsync, segui questi passaggi.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");
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
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 }
Per aggiungere alla funzione
readFromStream
il codice per leggere il testo dal file al completamento del metodo storageFile.openAsync, segui questi passaggi.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);
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
Guida introduttiva: Accesso a file con selezione file
Come selezionare e visualizzare un'immagine
Accesso ai file e autorizzazioni
Uso di un blob per salvare e caricare un esempio di contenuto
Riferimenti
Windows.Storage.StorageFile class