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

5
在制作一个关于Windows 8应用程序开发的实验时,我无法加载所有需要的图片。因此,为了能够在分享时使用分享图像,我需要检查该图像文件是否可用。 该项目是一个使用XAML和C#的Windows网格应用程序。 过去我使用过。

Using System.IO
 ... lost of code
privat void share()
....
    if (File.exist(filename)
    { 
       add file to share
    }

如果我在我的 Windows 8 项目中尝试这样做,会发现找不到 File 类。

我在互联网上搜索了一下,但没有找到一个 C# 示例代码来检查在 Windows 存储应用中是否存在。

Michiel

2个回答

13

你需要使用 StorageFile 而不是 File

这里有一个简单的示例来检查并获取文件。

StorageFile file;
try {
    file = await ApplicationData.Current.LocalFolder.GetFileAsync("foo.txt");
}
catch (FileNotFoundException) {
    file = null;
}

你可以编写一个函数

public static async Task<bool> FileExistsAsync(this StorageFolder folder, string fileName)
{
    try
    {
        await folder.GetFileAsync(fileName);
        return true;
    }
    catch (FileNotFoundException)
    {
        return false;
    }
}

看起来应该是"StorageFolder"而不是"LocalStorage"——这是API自回答以来的变化,还是我的误解? - Dawson Toth
可能是API发生了变化或者你理解有误,因为上面的代码运行良好。 - Mayank
1
@DawsonToth 我猜他们改变了API,现在用的是LocalFolder而不是LocalStorage - Mayank
2
在Windows 8.1中,您可以通过使用新方法TryGetItemAsync()来避免(缓慢的)异常处理。 - skst

2
如果您知道本地存储中的路径,并且有一堆要检查的文件,您可以执行以下操作...
var sourceFolder = Windows.ApplicationModel.Package.Current.InstalledLocation;
sourceFolder = await sourceFolder.GetFolderAsync("Assets");
var files = await sourceFolder.GetFilesAsync();
var requiredFiles = new List<String> { "ThisWorks.png", "NotHere.png" };
foreach(var filename in requiredFiles)
{
    // your example logic here...
    Debug.WriteLine(filename + " " + (files.Any(f => f.Name == filename) ? "Exists" : "Doesn't exist"));
}

当然,Windows.ApplicationModel.Package.Current.InstalledLocation 可以替换为与您关心的文件夹相关的引用。 - ZombieSheep

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接