簡體   English   中英

如何檢查Windows應用商店應用中是否存在文件?

[英]How to check if file exists in a Windows Store App?

有沒有其他方法可以檢查Windows應用商店應用中是否存在文件?

try
{
    var file = await ApplicationData.Current.LocalFolder.GetFileAsync("Test.xml");
    //no exception means file exists
}
catch (FileNotFoundException ex)
{ 
    //find out through exception 
}

根據這篇文章中接受的答案,目前沒有別的辦法。 但是,File IO團隊正在考慮更改api,以便返回null而不是拋出異常。

從鏈接帖子引用:

目前檢查文件是否存在的唯一方法是捕獲FileNotFoundException。 正如已經指出有一個明確的檢查和開放是一個競爭條件,因此我不希望有任何文件存在API添加。 我相信File IO團隊(我不在那個團隊,所以我不確定,但這是我所聽到的)正在考慮讓這個API返回null而不是拋出,如果該文件不存在。

這可能是舊的,但看起來他們已經改變了他們希望你接近這個的方式。

你應該嘗試制作文件,如果文件已經存在則返回。 是關於它的文檔。 我正在更新這個,因為這是我在Google上搜索此問題的第一個結果。

因此,在我的情況下,我想打開一個文件,或者如果它不存在則創建它。 我所做的是創建一個文件,如果它已經存在則打開它。 像這樣:

save = await dir.CreateFileAsync(myFile, CreationCollisionOption.OpenIfExists);

我偶然發現了Shashank Yerramilli的這篇博文,提供了更好的答案。

我已經測試了這款適用於Windows Phone 8的功能。 雖然沒有在Windows商店測試過

我在這里復制答案

對於Windows RT應用程序:

public async Task<bool> isFilePresent(string fileName)
 {
    var item = await ApplicationData.Current.LocalFolder.TryGetItemAsync(fileName);
    return item != null;
 }

對於Windows Phone 8

 public bool IsFilePresent(string fileName)
 {
     return System.IO.File.Exists(string.Format(@"{0}\{1}", ApplicationData.Current.LocalFolder.Path, fileName);
 }

檢查Windows Phone 8和WinRT中是否存在文件,無異常

您可以像這樣使用舊的Win32調用來測試目錄是否存在:

GetFileAttributesExW(path, GetFileExInfoStandard, &info);

return (info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? false: true;

它適用於桌面和Metro應用程序: http//msdn.microsoft.com/en-us/library/windows/desktop/aa364946%28v=vs.85%29.aspx

Microsoft已在Windows 8.1中向StorageFile添加了一項新功能,以允許用戶工程師確定是否可以訪問文件: IsAvailable

另一種檢查方法是通過獲取本地文件夾中的文件

    var collection =  ApplicationData.Current.LocalFolder.GetFilesAsync() 

使用此方法,然后迭代集合中的所有元素並檢查其可用性。

我嘗試使用舊技巧編寫自己的:

  1. 如果通過FileOpenPicker選擇文件,則GetFileAttributesEx()似乎總是以ERROR_ACCESS_DENIED結束;
  2. 同上FindFirstFileEx();
  3. 當通過FileOpenPicker選擇文件時,_stat()始終以ENOENT結束;
  4. 使用CREATE_NEW選項的CreateFile2()工作 - 如果文件確實存在,它將失敗,返回值為INVALID_HANDLE_VALUE,ERROR_FILE_EXISTS為最后一個錯誤; 如果文件不存在,則必須記住之后刪除創建的文件。

總而言之 - 你最好堅持使用異常處理方法。

8.1得到這樣的東西,我試過它有效。

var folder = ApplicationData.Current.LocalFolder;
var file = await folder.TryGetItemAsync("mytext.txt") as IStorageFile;

if (file == null)
{
   //do what you want
}
else
{
   //do what you want
}

http://marcominerva.wordpress.com/2013/11/19/how-to-check-if-a-file-exists-in-a-windows-8-1-store-apps-no-more-exception-處理/

    Dim myPath As StorageFolder
    If (From i In Await KnownFolders.MusicLibrary.GetFoldersAsync() Where i.Name = "PodBong").Count = 1 Then
        myPath = Await KnownFolders.MusicLibrary.GetFolderAsync("PodBong")
    Else
        myPath = Await KnownFolders.MusicLibrary.CreateFolderAsync("PodBong")

    End If

TryGetItemAsync的文檔說:“這個例子展示了如何檢查文件是否存在。” 似乎這個API正式用於此目的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM