如何检查文件是否存在于Windows Store应用程序中

本文关键字:存在 Windows Store 应用程序 是否 文件 何检查 检查 | 更新日期: 2023-09-27 18:18:55

是否有其他方法检查文件是否存在于Windows Store应用程序中?

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

如何检查文件是否存在于Windows Store应用程序中

根据这篇文章中公认的答案,目前没有其他办法。然而,文件IO团队正在考虑更改api,以便它返回null而不是抛出异常。

引用自链接的帖子:

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

这可能是旧的,但看起来他们已经改变了他们希望你如何处理这个

您应该尝试创建文件,如果文件已经存在,则返回。这是关于它的文件。我正在更新这个,因为这是我在谷歌搜索这个问题的第一个结果。

所以,在我的例子中,我想打开一个文件,或者创建它,如果它不存在的话。我所做的就是创建一个文件,如果它已经存在,就打开它。像这样:

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. GetFileAttributesEx()似乎总是以ERROR_ACCESS_DENIED结束,如果文件通过FileOpenPicker选择;
  2. FindFirstFileEx();
  3. _stat()总是以enent结束,当文件通过FileOpenPicker选择;
  4. CreateFile2()与CREATE_NEW选项工作-如果文件确实存在,它将失败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-handling/

    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似乎就是为这个目的而设计的。