如何检查Windowsapp store中是否存在文件?

是否有任何其他方式来检查文件是否存在于Windowsapp store?

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而不是抛出exception。

引用来自链接的post:

目前,检查文件是否存在的唯一方法是捕获FileNotFoundException。 正如已经指出,有一个明确的检查,开放是一个竞争条件,因此我不希望有任何文件存在的API添加。 我相信文件IO团队(我不在这个团队,所以我不知道肯定,但这是我所听到的)正在考虑让这个API返回null,而不是抛出,如果文件不存在。

这可能是旧的,但看起来他们已经改变了他们希望你接近的方式。

你应该尝试制作文件,然后如果文件已经存在,则退后。 这里是它的文档。 我正在更新,因为这是我的谷歌search这个问题的第一个结果。

所以,在我的情况下,我想打开一个文件,或创build它,如果它不存在。 我所做的是创build一个文件,并打开它,如果它已经存在。 像这样:

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

我偶然发现了Shashank Yerramilli的博客文章,它提供了一个更好的答案。

我已经testing了这个Windows Phone 8,它的工作原理。 虽然没有在Windows Store上testing过

我在这里复制答案

对于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调用来testing目录是否存在:

 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添加了一个新function,以允许用户工程师确定是否可以访问文件: IsAvailable

其他方法检查是通过获取本地文件夹中的文件

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

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

我试图用自己的诡计写自己的作品:

  1. 如果通过FileOpenPickerselect文件,GetFileAttributesEx()似乎总是以ERROR_ACCESS_DENIED结尾;
  2. 同上FindFirstFileEx();
  3. 当通过FileOpenPickerselect文件时,_stat()总是以ENOENT结尾;
  4. 具有CREATE_NEW选项的CreateFile2()可以工作 – 如果文件存在,它将失败,返回值为INVALID_HANDLE_VALUE,上一个错误为ERROR_FILE_EXISTS; 如果文件不存在,则必须记住之后删除创build的文件。

总而言之 – 你最好坚持使用exception处理方法。

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正式用于实现这个目的。