我认为这会非常简单,而且可能是,而我只是在错误的地方寻找,但这就是我尝试过的事情
我想检查文件是否存在。这是用户从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
感谢任何帮助。我只是想知道文件是否存在......
答案 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中,以便应用程序默认访问,而不是使用文档库。