Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Meglévő zene-, kép- vagy videómappákat adhat hozzá a megfelelő tárakhoz. Mappákat is eltávolíthat a tárakból, lekérheti a tárak mappáinak listáját, és felderítheti a tárolt fényképeket, zenéket és videókat.
A tárak mappák virtuális gyűjteményei, amelyek alapértelmezés szerint tartalmaznak egy ismert mappát, valamint azokat a mappákat, amelyeket a felhasználó az alkalmazás vagy valamelyik beépített alkalmazás használatával adott hozzá a tárhoz. A Képek tár például alapértelmezés szerint tartalmazza az ismert Képek mappát. A felhasználó hozzáadhat mappákat a Képek tárhoz, vagy eltávolíthatja őket az alkalmazás vagy a beépített Fényképek alkalmazás használatával.
Előfeltételek
Univerzális Windows-platform (UWP) alkalmazások aszinkron programozásának ismertetése
Megtudhatja, hogyan írhat aszinkron alkalmazásokat c# vagy Visual Basic nyelven, lásd Aszinkron API-k meghívása C# vagy Visual Basic. Az aszinkron alkalmazások C++-ban való írásáról további információt Aszinkron programozás c++című témakörben talál.
hozzáférési engedélyek a helyhez
Nyissa meg az alkalmazásjegyzékfájlt a Visual Studióban a Jegyzéktervezőben. A Képességek lapon válassza ki az alkalmazás által kezelt könyvtárakat.
- Zenetár
- Képtár
- Videótár
További információ: Fájlelérési engedélyek.
Hivatkozás beszerzése egy könyvtárra
Megjegyzés:
Ne felejtse el deklarálni a megfelelő képességet. További információt az alkalmazásképesség-deklarációkban talál.
Ha a felhasználó Zene, Képek vagy Video könyvtárára szeretne hivatkozni, hívja meg a StorageLibrary.GetLibraryAsync metódust. Adja meg a megfelelő értéket a KnownLibraryId enumerálásból.
var myPictures = await Windows.Storage.StorageLibrary.GetLibraryAsync(Windows.Storage.KnownLibraryId.Pictures);
A tárban lévő mappák listájának lekérése
A tárban lévő mappák listájának lekéréséhez kérje le a StorageLibrary.Folders tulajdonság értékét.
using Windows.Foundation.Collections;
IObservableVector<Windows.Storage.StorageFolder> myPictureFolders = myPictures.Folders;
Szerezze meg azt a mappát egy könyvtárban, ahová az új fájlok alapértelmezés szerint vannak mentve.
Ha meg szeretné találni azt a mappát egy könyvtárban, ahová új fájlokat alapértelmezés szerint mentenek, kérje le a StorageLibrary.SaveFolder tulajdonság értékét.
Windows.Storage.StorageFolder savePicturesFolder = myPictures.SaveFolder;
Meglévő mappa hozzáadása tárhoz
Ha mappát szeretne hozzáadni egy könyvtárhoz, hívja meg a StorageLibrary.RequestAddFolderAsync. Ha a Képek tár példáját vesszük, ennek a metódusnak a meghívása során egy mappaválasztó jelenik meg a felhasználó számára egy Adja hozzá ezt a mappát a Képekhez gombbal. Ha a felhasználó kiválaszt egy mappát, akkor a mappa az eredeti helyén marad a lemezen, és a StorageLibrary.Folders tulajdonság elemévé válik (és a beépített Fényképek alkalmazásban), de a mappa nem jelenik meg a Fájlkezelő Képek mappájának gyermekeként.
Windows.Storage.StorageFolder newFolder = await myPictures.RequestAddFolderAsync();
Mappa eltávolítása tárból
Ha el szeretne távolítani egy mappát egy tárból, hívja meg a StorageLibrary.RequestRemoveFolderAsync metódust, és adja meg az eltávolítandó mappát. A StorageLibrary.Folders és egy ListView vezérlőelem (vagy hasonló) használatával kijelölhet egy eltávolítandó mappát.
Amikor meghívja StorageLibrary.RequestRemoveFolderAsync, a felhasználó megjelenik egy megerősítést kérő párbeszédpanelen, amely szerint a mappa "többé nem jelenik meg a Képekben, de nem törlődik". Ez azt jelenti, hogy a mappa az eredeti helyén marad a lemezen, törlődik a StorageLibrary.Folders tulajdonságból, és a továbbiakban nem fog szerepelni a beépített Fényképek alkalmazásban.
Az alábbi példa feltételezi, hogy a felhasználó kiválasztotta azt a mappát, amelyet el szeretne távolítani egy ListView vezérlőelemből lvPictureFolders.
bool result = await myPictures.RequestRemoveFolderAsync(folder);
Értesítés a tárban lévő mappák listájának változásairól
Ha értesítést szeretne kapni a tár mappák listájának változásairól, regisztráljon egy kezelőt a tár StorageLibrary.DefinitionChanged eseményéhez.
myPictures.DefinitionChanged += MyPictures_DefinitionChanged;
void HandleDefinitionChanged(Windows.Storage.StorageLibrary sender, object args)
{
// ...
}
Médiatár mappái
Az eszköz öt előre meghatározott helyet biztosít a felhasználók és alkalmazások számára a médiafájlok tárolásához. A beépített alkalmazások ezekben a helyeken tárolják a felhasználó által létrehozott és letöltött médiatartalmakat.
A helyek a következők:
Képek mappa. Képeket tartalmaz.
Kameratekercs mappát. A beépített kamerából származó fényképeket és videókat tartalmazza.
Mentett képek mappa. Olyan képeket tartalmaz, amelyeket a felhasználó más alkalmazásokból mentett.
Zene mappát. Dalokat, podcastokat és hangoskönyveket tartalmaz.
Video mappát. Videókat tartalmaz.
A felhasználók vagy alkalmazások a médiatár mappáján kívül is tárolhatnak médiafájlokat az SD-kártyán. Ha megbízhatóan szeretne médiafájlt keresni az SD-kártyán, vizsgálja meg az SD-kártya tartalmát, vagy kérje meg a felhasználót, hogy keresse meg a fájlt egy fájlválasztó használatával. További információ: Az SD-kártyaelérése.
Médiatárak lekérdezése
Fájlok gyűjteményének lekéréséhez adja meg a tárat és a kívánt fájltípust.
using Windows.Storage;
using Windows.Storage.Search;
private async void getSongs()
{
QueryOptions queryOption = new QueryOptions
(CommonFileQuery.OrderByTitle, new string[] { ".mp3", ".mp4", ".wma" });
queryOption.FolderDepth = FolderDepth.Deep;
Queue<IStorageFolder> folders = new Queue<IStorageFolder>();
var files = await KnownFolders.MusicLibrary.CreateFileQueryWithOptions
(queryOption).GetFilesAsync();
foreach (var file in files)
{
// do something with the music files
}
}
A lekérdezés eredményei közé tartozik a belső és a cserélhető tároló is
A felhasználók alapértelmezés szerint tárolhatnak fájlokat az opcionális SD-kártyán. Az alkalmazások azonban letilthatják a fájlok SD-kártyán való tárolásának engedélyezését. Ennek eredményeképpen a médiatárak feloszthatók az eszköz belső tárhelyére és az SD-kártyára.
A lehetőség kezeléséhez nem kell további kódot írnia. A Windows.Storage metódusai névtérben, amelyek az ismert mappákat transzparens módon kérdezik le, mindkét helyről egyesítik a lekérdezés eredményeit. Az egyesített eredmények lekéréséhez sem kell megadnia a removableStorage képességet az alkalmazásjegyzékfájlban.
Vegye figyelembe az eszköz tárolójának állapotát az alábbi képen:
Ha a Képek tár tartalmát a(z) await KnownFolders.PicturesLibrary.GetFilesAsync()
meghívásával kérdezi le, az eredmények tartalmazni fogják mind a(z) internalPic.jpg-t, mind a(z) SDPic.jpg-t.
Fényképek használata
Azokon az eszközökön, ahol a kamera egy kis felbontású képet és egy nagy felbontású képet is ment minden képről, a mély lekérdezések csak az alacsony felbontású képet adják vissza.
A Camera Roll és a Mentett képek mappa nem támogatja a mély lekérdezéseket.
Fénykép megnyitása az alkalmazásban, amely rögzítette
Ha azt szeretné, hogy a felhasználó később újra megnyitjon egy fényképet a rögzített alkalmazásban, az alábbi példához hasonló kód használatával mentheti a CreatorAppId a fénykép metaadataival. Ebben a példában testPhoto egy StorageFile.
IDictionary<string, object> propertiesToSave = new Dictionary<string, object>();
propertiesToSave.Add("System.CreatorOpenWithUIOptions", 1);
propertiesToSave.Add("System.CreatorAppId", appId);
testPhoto.Properties.SavePropertiesAsync(propertiesToSave).AsyncWait();
Fájl hozzáadása a médiatárhoz stream módszerekkel
Ha egy médiatárat egy ismert mappával(például KnownFolders.PictureLibrary) ér el, és streamelési módszerekkel ad hozzá egy fájlt a médiatárhoz, mindenképpen be kell zárnia a kód által megnyitott összes streamet. Ellenkező esetben ezek a metódusok nem tudják a vártnak megfelelően hozzáadni a fájlt a médiatárhoz, mert legalább egy stream rendelkezik leíróval a fájlhoz.
Ha például a következő kódot futtatja, a fájl nem lesz hozzáadva a médiatárhoz. A kódsorban using (var destinationStream = (await destinationFile.OpenAsync(FileAccessMode.ReadWrite)).GetOutputStreamAt(0))
az OpenAsync metódus és a GetOutputStreamAt metódus is megnyit egy streamet. Azonban csak a GetOutputStreamAt metódus által megnyitott stream lesz megsemmisítve a using utasítás következtében. A másik stream nyitva marad, és megakadályozza a fájl mentését.
StorageFolder testFolder = await StorageFolder.GetFolderFromPathAsync(@"C:\test");
StorageFile sourceFile = await testFolder.GetFileAsync("TestImage.jpg");
StorageFile destinationFile = await KnownFolders.CameraRoll.CreateFileAsync("MyTestImage.jpg");
using (var sourceStream = (await sourceFile.OpenReadAsync()).GetInputStreamAt(0))
{
using (var destinationStream = (await destinationFile.OpenAsync(FileAccessMode.ReadWrite)).GetOutputStreamAt(0))
{
await RandomAccessStream.CopyAndCloseAsync(sourceStream, destinationStream);
}
}
Ha sikeresen szeretne streammetelyeket használni egy fájl médiatárhoz való hozzáadásához, zárja be a kód által megnyitott összes streamet, ahogy az az alábbi példában is látható.
StorageFolder testFolder = await StorageFolder.GetFolderFromPathAsync(@"C:\test");
StorageFile sourceFile = await testFolder.GetFileAsync("TestImage.jpg");
StorageFile destinationFile = await KnownFolders.CameraRoll.CreateFileAsync("MyTestImage.jpg");
using (var sourceStream = await sourceFile.OpenReadAsync())
{
using (var sourceInputStream = sourceStream.GetInputStreamAt(0))
{
using (var destinationStream = await destinationFile.OpenAsync(FileAccessMode.ReadWrite))
{
using (var destinationOutputStream = destinationStream.GetOutputStreamAt(0))
{
await RandomAccessStream.CopyAndCloseAsync(sourceInputStream, destinationStream);
}
}
}
}