Windows Dev Center

File

Windows 8.1 offre il supporto avanzato per la gestione dei file in-app, nuove modalità per interagire con il contenuto degli utenti attraverso le raccolte e la possibilità di eseguire il push dei contenuti univoci delle tue app nell'indice di Windows. Questo significa che la tua app è in grado di accedere agevolmente ai contenuti degli utenti e creare contenuti facilmente rilevabili dalle altre app.

Funzionalità nuove o aggiornate in Windows 8.1

Aggiornamento della selezione file per il supporto di nuove modalità di visualizzazione delle app

[Accedi all'esempio della selezione file ora.]

In Windows 8.1 la selezione file può essere chiamata da app in esecuzione in modalità di visualizzazione a schermo diviso e a schermo intero. Si tratta di un'opzione utile per gli utenti, che così possono lavorare nei modi preferiti, anche in multitasking. Se ad esempio un utente ha una conversazione di Skype aperta in una finestra e l'app email in un'altra, l'app email può aprire la selezione file in modo che l'utente possa aggiungere un allegato senza dover visualizzare l'app in modalità a schermo intero. Per altre informazioni sull'uso della selezione file, vedi Guida introduttiva: Accesso a file con selezioni file.

Gestione in-app delle librerie degli utenti

[Accedi all'esempio della gestione delle raccolte ora.]

In Windows 8.1 è stata introdotta la classe StorageLibrary, che consente agli utenti di gestire le cartelle nelle raccolte personali (come Musica e Video) dall'interno di un'app. Questa è una funzionalità particolarmente utile nelle app per raccolte multimediali, in cui gli utenti vogliono spesso ampliare le raccolte aggiungendo cartelle che contengono altre immagini, musica o video.

Tutto questo è possibile grazie a una selezione file specifica, che viene chiamata usando i metodi StorageLibrary, che permettono agli utenti di aggiungere cartelle alle raccolte. Per ampliare la raccolta di elementi multimediali, gli utenti non devono più uscire dalla tua app e passare al desktop.

Recupero di cartelle o file padre

[Accedi all'esempio di accesso ai file ora.]

Le API di archiviazione per Windows 8 non definiscono un metodo per recuperare direttamente la cartella padre di un elemento di archiviazione, rendendo così necessaria la scrittura di logica personalizzata. In Windows 8.1 puoi usare il metodo GetParentAsync per recuperare la StorageFolder padre di un file o una cartella.

Importante  Per il corretto funzionamento del metodo GetParentAsync, devi avere accesso all'elemento padre dichiarando le funzionalità della raccolta oppure salvando in modo permanente una cartella di livello superiore nell'elenco di accesso futuro. Se non puoi accedere all'elemento padre, questo metodo restituisce null invece di generare un'eccezione.

Confronto dei file con IsEqual

[Accedi all'esempio di accesso ai file ora.]

Le API di archiviazione per Windows 8 non definiscono un metodo per il confronto diretto degli elementi di archiviazione per stabilire se rappresentano lo stesso elemento. Gli sviluppatori hanno trovato una soluzione confrontando i percorsi, ma è comunque possibile che esistano elementi senza valori di percorso. In Windows 8.1 puoi usare il metodo IsEqual per appurare se due elementi di archiviazione rappresentano lo stesso file.

L'esempio seguente mostra come usare il nuovo metodo per confrontare due file di archiviazione per stabilire se sono uguali.


function openNewFile() {
    var picker = new Windows.Storage.Pickers.FileOpenPicker;
    picker.fileTypeFilter.replaceAll(["*"]);
    picker.pickSingleFileAsync().then(function (file) {
        var alreadyOpenedFile = null;
        _openFiles.some(function (openFile) {
            if (file.IsEqual(openFile.file)) {
                alreadyOpenedFile = openFile;
                return true;
            }
            return false;
        });

        if (alreadyOpenedFile != null) {
            alreadyOpenedFile.window.activate();
        } else {
            createNewFileViewerWindow(file);
        }
    });
}


Nuove proprietà KnownFolders

Windows 8.1 introduce due nuove proprietà KnownFolders che consentono di accedere ai file in due posizioni aggiuntive: CameraRoll e Playlists.

La proprietà KnownFolders.CameraRoll ti permette di accedere alle immagini acquisite con la fotocamera del dispositivo, esattamente come la proprietà esistente di Windows Phone 8. La proprietà KnownFolders.Playlists invece ti permette di accedere alle playlist dell'utente.

Recupero dei file senza requisiti di gestione degli errori

[Accedi all'esempio di accesso ai file ora.]

In Windows 8.1 è stato introdotto il metodo StorageFolder.TryGetItemAsync, che permette all'app di provare a recuperare un file o una cartella in base al nome senza dover aggiungere la logica di rilevamento degli errori nel codice dell'app. Se non è possibile trovare il file o la cartella, TryGetItemAsync restituisce null e non genera un'eccezione. Dato che il metodo restituisce null, puoi anche usarlo per determinare se il file o la cartella specificata esiste.

Esposizione dei file di visualizzazione in scenari di apertura (con)

In Windows 8.1 puoi usare la proprietà NeighboringFilesQuery per consentire gli spostamenti su file vicini a quello per cui è stata attivata un'app.

In Windows 8 l'app predefinita per l'apertura di contenuto con un'associazione di file specifica recupera un oggetto che rappresenta solo il file richiamato. Questo può essere un problema nelle app per raccolte multimediali, nelle quali gli utenti si aspettano di poter passare ai file vicini. In Windows 8.1 l'app predefinita può ottenere la raccolta di file della vista circostante, ovvero la raccolta da cui è stato selezionato il file richiamato.

La tua app deve dichiarare una funzionalità specifica della raccolta per recuperare gli elementi del tipo corrispondente. Ad esempio, per recuperare le immagini in NeighboringFilesQuery, la tua app deve dichiarare la funzionalità per la raccolta immagini.

Questo esempio mostra come recuperare una raccolta di file vicini al file che ha attivato un'app.


function activated(sender, e) {
    if (e.detail.kind === Windows.ApplicationModel.Activation.ActivationKind.file && e.files.size > 0) {
        var invokedFile = e.detail.files[0];
        var neighboringFiles = e.detail.neighboringFilesQuery;
        if (neighboringFiles) {
            result.neighboringFiles.findStartIndexAsync(e.detail.files[0]).done(function (index) {
                var invokedFileElement = document.getElementById("invokedFile");
                invokedFileElement.textContent = "Invoked item: " + invokedFile.name + ", at index " + index + " in view file enumeration.";

                var prevFileslist = document.getElementById("prevFilesList");
                result.neighboringFiles.getFilesAsync(0, index).done(function (fileList) {
                    fileList.forEach(function (file) {
                        // Create an entry in the list for the file.
                        var fileItemElement = document.createElement("li");
                        fileItemElement.textContent = file.name;
                        prevFileslist.appendChild(listItemElement);
                    });
                },
                function (error) {
                    // Handle error trying to get list of files.
                });

                var nextFileslist = document.getElementById("nextFilesList");
                result.neighboringFiles.getFilesAsync(index + 1, -1).done(function (fileList) {
                    fileList.forEach(function (file) {
                        // Create an entry in the list for the file.
                        var fileItemElement = document.createElement("li");
                        fileItemElement.textContent = file.name;
                        nextFileslist.appendChild(listItemElement);
                    });
                },
                function (error) {
                    // Handle error trying to get list of files.
                });
            },
            function (error) {
                // Handle error trying to get file index.
            });
        }
    }
}

app.addEventListener("activated", activated);


Aggiunta di contenuti dell'app all'indice di Windows

[Accedi all'esempio dell'indicizzatore ora.]

In Windows 8.1 il contenuto della tua app può essere aggiunto direttamente all'indice di Windows. L'aggiunta di contenuto all'indice garantisce che il contenuto dell'app possa essere sottoposto rapidamente a ricerche con query della cartella ApplicationIndexedContent o mediante l'uso del nuovo controllo di ricerca in-app. Puoi aggiungere proprietà di file e contenuto all'indice usando la nuova API impostata in Windows.Storage.Search o creando file "appcontent-ms".

OneDrive

In Windows 8.1, OneDrive offre due nuovi aggiornamenti di funzionalità:

  • Spazio di archiviazione file

    Per un utente con account Microsoft (MSA) è ora semplice selezionare file e cartelle in OneDrive e aprirli nella tua app.

  • Strumento di gestione dello spazio di archiviazione OneDrive

    Abbiamo migliorato l'esperienza di gestione della quota di archiviazione di OneDrive in Windows 8.1. Gli utenti possono gestire OneDrive direttamente da Windows. Possono visualizzare l'uso dello spazio di archiviazione, aggiornare il piano di archiviazione e recuperare spazio su OneDrive senza uscire dall'interfaccia Windows 8.1 nativa.

Supporto di file di immagine DDS

Nelle app di Windows Store che usano il controllo WebView XAML (Extensible Application Markup Language) e JavaScript è ora supportato il formato di file Microsoft DDS (DirectDraw Surface), in modo che sia possibile creare app WebGL che vengono eseguite rapidamente anche con trame estese.

Informazioni sulla compressione a blocchi e sul formato DDS

La compressione a blocchi è un tipo di compressione usato per archiviare dati di pixel in un file DDS (DirectDraw Surface). Diversamente da altri formati di file di immagine, le unità di elaborazione grafica (GPU, Graphics Processing Unit) possono eseguire il campionamento direttamente da formati di compressione a blocchi, senza effettuare operazioni di decompressione o elaborazione. In questo modo, vengono migliorate le prestazioni di caricamento delle risorse di trame nelle app di Windows Store. I formati di compressione a blocchi usano una media di 4 - 8 bit per pixel, mentre una trama RGBA tipica usa 32 bit per pixel. I formati di compressione a blocchi pertanto riducono anche l'uso della memoria di GPU totale dell'87,5%, al massimo, permettendo di usare un numero maggiore di asset oppure asset di qualità superiore nelle app di Windows Store.

Pur essendo disponibili numerosi algoritmi di compressione a blocchi, le app di Windows Store che usano il controllo WebView XAML e JavaScript in Windows 8.1 supportano solo tre tipi di compressione a blocchi nel formato di file DDS: BC1, BC2 e BC3. Le immagini DDS con compressione a blocchi vengono caricate più velocemente delle immagini JPEG. Non è richiesto infatti quasi alcun tempo di decodifica CPU ed è possibile usare più risorse di trame, poiché la compressione a blocchi usa meno memoria di GPU. I file DDS con compressione a blocchi rappresentano il formato di immagine ideale per gli sfondi e le trame di giochi standard.

Come usare la compressione a blocchi nei file DDS

Per la creazione o la conversione di asset di immagini nel formato di compressione a blocchi nelle app di Windows Store che usano il controllo WebView XAML o JavaScript, devi tenere conto delle restrizioni seguenti:

  • Sono supportati solo i formati di compressione a blocchi BC1, BC2 e BC3, che corrispondono ai valori dell'enumerazione DXGI_FORMAT seguenti:

    • DXGI_FORMAT_BC1_UNORM
    • DXGI_FORMAT_BC2_UNORM
    • DXGI_FORMAT_BC3_UNORM
  • Deve essere usato un canale alfa premoltiplicato. Sono supportati sia i file DDS legacy che usano formati che definiscono in modo esplicito il canale alfa premoltiplicato (DXT1, DXT2, DXT4) sia i nuovi file DDS che usano la struttura DDS_HEADER_DX10 con un valore DDS_ALPHA_MODE valido (DDS_ALPHA_MODE_OPAQUE e DDS_ALPHA_MODE_PREMULTIPLIED).

  • Le dimensioni X e Y devono essere multipli di 4 pixel.

  • Non sono supportate le trame di volume, le mappe cubi, i mipmap o i formati di trama in DDS.

Se non tieni conto di queste restrizioni, il file DDS non verrà caricato nelle app di Windows Store che usano il controllo WebView XAML o JavaScript. Per altre informazioni, vedi questo link.

Dopo aver creato un asset con compressione a blocchi in un file DDS, puoi caricare il file DDS nel markup o mediante JavaScript:

HTML

<img src=”sample.dds” />

JavaScript

var img = new Image();
img.src = “sample.dds”;

Per altre informazioni sulla compressione a blocchi e il formato di file DirectDraw Surface, vedi l'argomento relativo alla compressione a blocchi, la Guida alla programmazione per DDS e l'argomento relativo alla documentazione tecnica di riferimento per DDS.

Quando usare i formati di compressione a blocchi

Come affermato in precedenza, i file DDS con compressione a blocchi rappresentano un'ottima soluzione per aumentare il numero di trame di grandi dimensioni che puoi usare in un'app di Windows Store ottimizzando il tempo di caricamento dell'app. Pur essendo più efficienti in termini di uso della memoria di GPU, i file DDS con compressione a blocchi consumano più spazio su disco rispetto ai file JPEG. I file DDS con compressione a blocchi vengono usati in modo ottimale come asset locale in un pacchetto di applicazione e non rappresentano il formato ideale per il download dalla rete. Anche se sono supportati in Internet Explorer 11, i file DDS con compressione a blocchi prevedono un costo di rete elevato e pertanto non sono la soluzione ideale per il Web.

Dal momento che il formato di compressione a blocchi comporta una perdita di dati, analogamente ad altri formati con perdita di dati devi verificare che la qualità visiva non venga compromessa con la conversione alla compressione a blocchi. La compressione a blocchi funziona in modo ottimale con immagini "naturali" reali, ma può produrre artefatti in caso di sfumature e cambiamenti di colore netti.

 

 

Mostra:
© 2015 Microsoft