如何检查Windows应用商店应用中是否存在文件?

Har*_*san 48 c# filenotfoundexception microsoft-metro windows-8 windows-runtime

有没有其他方法可以检查Windows应用商店应用中是否存在文件?

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

key*_*rdP 26

根据这篇文章中接受的答案,目前没有别的办法.但是,File IO团队正在考虑更改api,以便返回null而不是抛出异常.

从链接帖子引用:

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

  • ApplicationData.Current.LocalFolder.TryGetItemAsync(fileName)现在可以做到这一点.不再需要丑陋的异常处理.请记住,这也是一个等待的电话. (4认同)
  • 我相信Windows 8.1中新的IsAvailable属性解决了这个问题. (2认同)

Bil*_*ldr 13

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

你应该尝试制作文件,如果文件已经存在则返回.是关于它的文档.我正在更新这个,因为这是我在Google上搜索此问题的第一个结果.

因此,在我的情况下,我想打开一个文件,或者如果它不存在则创建它.我所做的是创建一个文件,如果它已经存在则打开它.像这样:

save = await dir.CreateFileAsync(myFile, CreationCollisionOption.OpenIfExists);
Run Code Online (Sandbox Code Playgroud)

  • 这仅在您尝试使用唯一名称创建文件时才有效.如果你只是检查文件的存在,那么显然你不想这样做. (4认同)

Jap*_*Jap 8

我偶然发现了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;
 }
Run Code Online (Sandbox Code Playgroud)

对于Windows Phone 8

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

检查Windows Phone 8和WinRT中是否存在文件,无异常