2016-10-03 90 views
0

我試圖確保文件被複制到另一個位置 - 爲SQLite的原因(見UWP App SQLite Access database in Documents Library)。在UWP驗證文件寫入C#

問題是,如果我刪除了對目標StorageFile的訪問(即拔出USB棒然後嘗試保存),StorageFile的CopyAndReplaceAsync方法將不會提及該文件是否寫入失敗。

因此,試圖打開文件以測試它是否成功寫入(使用GetFileFromPathAsync)會引發COM異常(因爲該文件不存在),但即使在捕獲錯誤之後它也不會結束任務。

我想弄清楚是否有更好的方法來做到這一點 - 我試過使用FileIO做同樣的事情,但即使我正在寫的文件是在FutureAccessList它似乎並不想要授予訪問權限。

任何想法/併發症/方法我只是沒有正確使用?

相關的代碼我有低於:

​​

回答

0

根據你的描述,似乎你要檢查文件是否存在。如果是這樣,您可以使用StorageFile.IsAvailable屬性或StorageFolder.TryGetItemAsync方法。

參考Common questions and answers about files and app data, part 2: Files

問:什麼是來檢查文件是否存在的最佳方法?

A.在Windows上,使用StorageFile.IsAvailable屬性或StorageFolder.TryGetItemAsync方法,這兩個方法都是在Windows 8.1中爲此目的而引入的。但是,在Windows Phone 8.1上,這些成員不可用,因此目前必須在try/catch塊內調用StorageFolder.GetFileAsync,並檢查「文件未找到」異常。 (這種方法也適用於Windows。)請注意,如果您正在檢查以確定是否創建該文件,那麼只需使用StorageFolder.CreateFileAsyncCreateCollisionOption.OpenIfExists即可。

雖然本文是爲Windows 8.1和Windows Phone 8.1編寫的,但它仍適用於UWP應用程序。而在UWP中,StorageFile.IsAvailable屬性和StorageFolder.TryGetItemAsync方法是通用API,它們可以用於所有Windows 10設備。