如何检查Windows Universal App中是否存在文件

时间:2015-11-19 23:46:21

标签: c# win-universal-app

我认为这会非常简单,而且可能是,而我只是在错误的地方寻找,但这就是我尝试过的事情

我想检查文件是否存在。这是用户从FileOpenPicker中选择的文件。所以,我需要能够检查他们选择的文件是否存在。在我的代码中,我只是设置一个静态路径,以便我的编码示例保持简单。

请记住,这不适用于Windows手机,这适用于Windows 8.1桌面应用

尝试1

来自here

private async void TextBox_TextChanged(object sender, TextChangedEventArgs e)
{
    if (await DoesFileExistAsync("C:\\Users\\username\\Documents\\testFiles\\testFile.docx"))
        {
            var checkboxDialog = new MessageDialog("exists");
            await checkboxDialog.ShowAsync();
        }
        else
        {
            var nopeDialog = new MessageDialog("doesn't exist");
            await nopeDialog.ShowAsync();
        }
}
async Task<bool> DoesFileExistAsync(string fileName)
{
    try 
    {
        //This was originally just await FolderPicker.GetFileAsync(fileName), but it didn't compile.
        await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync(fileName);
        return true;
    }
    catch
    {
        return false;
    }
}

此ALWAYS返回false。我已经尝试过多种方式设置文件名,没有运气。我认为这是最接近正确的,但我无法达到目的。

尝试2

来自here

private async void TextBox_TextChanged(object sender, TextChangedEventArgs e)
{
    var folder = ApplicationData.Current.LocalFolder;
    var file = await folder.TryGetItemAsync("C:\\Users\\username\\Documents\\testFiles\\testFile.docx");

    if (file != null)
    {
        var checkboxDialog = new MessageDialog("exists");
        await checkboxDialog.ShowAsync();
    }
    else
    {
        var nopeDialog = new MessageDialog("doesn't exist");
        await nopeDialog.ShowAsync();
    }
}  

这种方法基本相同,结果相同。在尝试FileNotFoundException

时,它有TryGetItemAsync

感谢任何帮助。我只是想知道文件是否存在......

1 个答案:

答案 0 :(得分:2)

你在错误的地方寻找。如果文件存在于搜索的文件夹中,则两种方法都可以使用。这两个示例都正确失败,因为InstalledLocation(try 1)或LocalFolder(try 2)中不存在该文件。

你得到第一个方法的主题是非常过时的。当时捕获异常是唯一的方法。从那时起,我一直在添加TryGetItemAsync。

StorageFolder.TryGetItemAsync查找您正在查看的StorageFolder对象内的文件。请求的路径必须相对于文件夹:您无法传递完整路径以尝试查找不相关的文件。

假设您的应用具有适当的文档文件夹功能,您可以从KnownFolders。DocumentsLibrary获取文档库文件夹,然后查找相对于该文件夹的文件:

StorageFolder docs = KnownFolders.DocumentsLibrary;
StorageFile file = docs.TryGetItemAsync("testFiles\\testFile.docx");

这里的一个主要警告是权限。 DocumentsLibrary文件夹不适用于一般用途,您的应用程序只能查看与文档库中关联的类型的文件。您可以使用文件选择器来选择查找文件的位置,也可以将文件保存在ApplicationData.LocalFolder中,以便应用程序默认访问,而不是使用文档库。