UWP 文件系統(tǒng)接口

UWP 文件系統(tǒng)接口

本文章翻譯自 MSDN

UWP 文件系統(tǒng)的相關(guān)接口都放在下面三個(gè)名稱空間中:
Windows.Storage
Windows.Storage.Streams
Windows.Storage.Pickers

文件訪問權(quán)限

在 UWP 平臺(tái)中,程序?qū)ξ募脑L問受到了限制。默認(rèn)情況下,程序僅能訪問少數(shù)幾個(gè)特定位置。如果要訪問其他位置,需要通過 file picker 或者在 manifest 中聲明權(quán)限才行。

程序默認(rèn)可以訪問的位置

你的 app 無(wú)需做任何操作就可以訪問下面幾個(gè)位置:

  • 程序安裝目錄
    訪問程序安裝目錄主要有兩個(gè)方法:
    1. 通過 Package.Current.InstalledLocation 獲取 StorageFolder:
Windows.Storage.StorageFolder installedLocation = Windows.ApplicationModel.Package.Current.InstalledLocation;
  1. 通過 app URI 獲取 StorageFile:
StorageFile file = await StorageFile.GetFileFromApplicationUriAsync("ms-appx:///file.txt");

"ms-appx:///" 前綴就代表程序安裝目錄,具體可以參考How to use URIs to reference content

程序安裝目錄是 只讀 目錄,并且無(wú)法通過 file picker 獲取。

  • 程序的數(shù)據(jù)區(qū)
    給程序存儲(chǔ)數(shù)據(jù)用的文件夾。這些文件夾(local, roaming and temporary)會(huì)在程序安裝時(shí)創(chuàng)建。
    訪問程序的數(shù)據(jù)區(qū)主要有兩個(gè)方法:
    1. 通過 ApplicationData.Current.LocalFolder 獲取 StorageFolder:
StorageFolder localFolder = ApplicationData.Current.LocalFolder;

除了 LocalFolder 屬性,還可以使用 RoamingFolder 或 TemporaryFolder 屬性來(lái)獲取其他文件夾。
要了解更多關(guān)于 app data locations 的使用方法,可以參考 Managing application data

  1. 通過 app URI 獲取 StorageFile:
StorageFile file = await StorageFile.GetFileFromApplicationUriAsync("ms-appdata:///local/file.txt");

"ms-appdata:///local/" 前綴就代表 LocalFolder,還可以使用 "ms-appdata:///roaming/" 或 "ms-appdata:///temporary/" 來(lái)獲取另外兩個(gè)文件夾。要了解 app URIs 的更多知識(shí),具體可以參考:How to load file resources

程序數(shù)據(jù)區(qū)是 可讀寫 目錄,并且無(wú)法通過 file picker 獲取。

  • 可插拔設(shè)備

枚舉文件和文件夾

// 獲取圖片文件夾所在的 StorageFolder
StorageFolder picFolder = KnownFolders.PicturesLibrary;

// 獲取圖片文件夾下所有文件(不會(huì)遞歸子目錄)
IReadOnlyList<StorageFile> fileList = await picFolder.GetFilesAsync();

// 獲取圖片文件夾下所有子文件夾(不會(huì)遞歸子目錄)
IReadOnlyList<StorageFolder> folderList = await picFolder.GetFoldersAsync();

// 獲取圖片文件夾下所有子項(xiàng)(不會(huì)遞歸子目錄)
IReadOnlyList<IStorageItem> itemList = await picFolder.GetItemsAsync();

// 獲取圖片文件夾中名為 Screenshots 的文件夾
IStorageItem item = await picFolder.TryGetItemAsync("Screenshots");
if (item != null && item is StorageFolder)
{
    StorageFolder screenshotsFolder = item as StorageFolder;
}

// 查詢圖片文件夾下所有 .png 文件(遞歸子目錄)
QueryOptions queryOptions = new QueryOptions();
queryOptions.FileTypeFilter.Add(".png");
queryOptions.FolderDepth = FolderDepth.Deep;
StorageFileQueryResult queryResult = picFolder.CreateFileQueryWithOptions(queryOptions);
IReadOnlyList<StorageFile> queryFileList = await queryResult.GetFilesAsync();

注意 使用以上代碼前,要先在 Package.appxmanifest 里添加圖片庫(kù)的訪問權(quán)限。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評(píng)論 19 139
  • 1.創(chuàng)建文件夾 !/bin/sh mkdir -m 777 "%%1" 2.創(chuàng)建文件 !/bin/sh touch...
    BigJeffWang閱讀 10,465評(píng)論 3 53
  • Ubuntu的發(fā)音 Ubuntu,源于非洲祖魯人和科薩人的語(yǔ)言,發(fā)作 oo-boon-too 的音。了解發(fā)音是有意...
    螢火蟲de夢(mèng)閱讀 100,587評(píng)論 9 468
  • Linux系統(tǒng)一般有4個(gè)主要部分: 內(nèi)核、shell、文件系統(tǒng)和應(yīng)用程序。內(nèi)核、shell和文件系統(tǒng)一起形成了基本...
    偷風(fēng)箏的人_閱讀 3,372評(píng)論 1 17
  • 易中天品三國(guó)時(shí),如是說(shuō)。 建安二十四年五月,劉備從曹操手里奪得漢中;七月,自稱漢中王。還師成都,任命許靖為太傅...
    牌牌閱讀 748評(píng)論 0 0

友情鏈接更多精彩內(nèi)容