[開發] Win8/Win8.1/WP8.1存取檔案 (2)

作者: hoyunxian (WildDagger)   2014-06-17 11:01:12
基本上LocalFolder/RoamingFolder/TemporaryFolder操作方式是相同的,
(因為全部都是StorageFolder物件)
另外LocalSettings/RoamingSettings操作方式也是相同的
此外StorageFolder與StorageFile的操作方式也有八九成相同
不過(理所當然的)StorageFile不能列舉檔案與新建檔案,
所以我都會用StorageFolder當範例,其他的請舉一反三
(LocalSettings/RoamingSettings的操作方法後述)
以下提到的CreateCollisionOption列舉
是當你操作的時候碰到同名狀況時應該採用的方式:
ReplaceExisting(問答無用直接蓋掉)
OpenIfExists(有檔案就打開,沒檔案就新建)
GenerateUniqueName(有同名檔案存在的話就在後面加編號)
FailIfExists(拋出例外)
常用的是前三者,最後一個拋出例外則是當你想詢問使用者該怎麼處理的時候可以使用
(不過如果是用Picker物件的話程式會自動提示你)
StorageFolder的操作方式很簡單,多半是一個方法就結束:
CreateFileAsync(檔名(string格式), CreateCollisionOption列舉)
建立檔案(資料夾就是把CreateFileAsync改成CreateFolderAsync,
參數一模一樣,CreateCollisionOption列舉可省掉但碰到狀況會直接拋例外)
GetFileAsync(檔名(string格式))
取得檔案(資料夾一樣是把GetFileAsync換成GetFolderAsync,
參數一模一樣,不過沒抓到檔案的話會回傳null,還得自己判斷,
所以我比較推薦用CreateFile(Folder)Async搭配CreateCollisionOption列舉)
GetFilesAsync()
取得該目錄底下的檔案
(改成GetFoldersAsync是取得目錄,
改成GetItemsAsync是檔案與資料夾一起列舉)
GetParentAsync()
取得該目錄所在的資料夾
GetBasicPropertiesAsync()
回傳檔案屬性的物件,要判斷檔案大小的話必須從這個回傳物件來判斷。
RenameAsync(檔名(string格式), NameCollisionOption列舉)
改檔案名,跟CreateFileAsync的方式差不多一樣
不過NameCollisionOption列舉(理所當然)沒有OpenIfExists這個選項
DeleteAsync(StorageDeleteOption列舉)
刪除檔案,
StorageDeleteOption列舉是讓你決定要不要直接砍了不放資源回收桶
作者: zxvc (眾生都是未來佛)   2014-06-17 13:49:00
請問LocalFolder在WP8.1是否有絕對路徑?能接PC,用檔案管理員(透過MTP)看到嗎?有點想寫信請MoliPlayer能支援存取Camera Roll以外且MTP能存取到的資料夾,不知WP8.1能不能辦到。
作者: hungys (hungys)   2014-06-17 14:37:00
8.1可以,所以才這麼多檔案總管App例如截圖的目錄在C:\Data\Users\Public\Pictures\Screensho電腦端能看到的應該是C:\Data\Users\Public\這層之下的
作者: zxvc (眾生都是未來佛)   2014-06-17 14:40:00
謝謝。

Links booklink

Contact Us: admin [ a t ] ucptt.com