Intr-o aplicatie pentru Windows 8 de tip Windows Metro style app cand avem nevoie sa lucram cu fisiere suntem constransi sa folosim StorageFolder si StorageFile. API este destul de diferit fata de cum ne-am obisnuit pana acuma.
Exista mai multe locatii pe care le putem accesa by default, precum: local folder, roaming folder (direct legat de AD) si temporary folder. Aceste foldere se pot accesa prin urmatoarea modalitate:
Exista mai multe locatii pe care le putem accesa by default, precum: local folder, roaming folder (direct legat de AD) si temporary folder. Aceste foldere se pot accesa prin urmatoarea modalitate:
StorageFolder localFolderStorage = Windows.Storage.ApplicationData.Current.LocalFolder;
Exista cateva foldere predefinite, pe langa acestea trei pe care le putem accesa folosing clasa statica KnownFolders. Prin intermediul acestei clase avem acces la urmatoarele foldere:- Document library
- Home group
- Media server devices
- Music library
- Pictures library
- Removable library
- Video library
StorageFolder storageFolder = KnownFolders.HomeGroup;
StorageFile storageFile = storageFolder.CreateFileAsync("Foo.txt", CreationCollisionOption.ReplaceExisting);
In momentul de fata API care il avem disponibil nu ne permite sa verificam daca un fisier sau un folder exista. In cazul in care accesam un fisier care nu exista primim o eroare de tipul FileNotFoundException. O solutie la aceasta problema este sa ne definim un extension method care sa verifice ErrorCode returnat de apelul metodei noastre ( NOTA: tot API-ul care manipuleaza fisiere este async).var errorCode =storageFolder.GetFileAsync("Foo.txt").ErrorCode
bool fileExist = errorCode != null
&& errorCode.GetType() != typeof(FileNotFoundException);
Operatiile de read si write sunt putin diferite fata de cum ne-am obisnuit noi. Cand deschidem un fisier, obtinem un IRandomAccessStream prin intermediul caruia putem sa scriem sau sa citim date.using( IRandomAccessStream rs = await storageFile.OpenAsync(FileAccessRead.ReadWrite))
{
using( DataWriter dw = new DataWriter(rs))
{
dw.WriteString("FooContent");
await dw.StoreAsync();
await dw.FlushAsync();
}
rs.Seek(0);
using( DataReader dr = new DataReader(rs))
{
string result = dr.ReadString(8);
}
}
Trebuie avut grija la metodele await si cum le manipulam. In rest, odata ce ne-am dat seama cum functioneaza totul este usor de folosit. Din pacate nu tot API-ul cu care ne-am obisnuit noi pentru acces la fisiere este suportat.
Sau altfel spus, un Windows Phone cu ecran mai mare.. :)
ReplyDeleteSi ca si acolo (sau ca la Android si iPhone), primul lucru care lumea il va cauta va fi cum sa scape de walled garden, dovada ca cele mai interesante aplicatii pentru Windows Phone sunt cele sideloaded ..