[英]How do I check if a file exists in a Windows Universal App
我以為這很簡單,也許是,而且我只是在錯誤的地方尋找,但這就是我嘗試過的
我想檢查文件是否存在。 這是用戶從FileOpenPicker
選擇的文件。 因此,我需要能夠檢查他們選擇的文件是否存在。 在我的代碼中,我只是設置了一條靜態路徑,因此我的編碼示例保持簡單。
請記住,這不適用於Windows Phone,這適用於Windows 8.1桌面應用程序
嘗試1
從這里
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;
}
}
這總是返回false。 我嘗試了多種設置文件名的方法,但是沒有運氣。 我認為這是最接近正確的方法,但我無法說到底。
試試2
從這里
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();
}
}
此方法基本相同,並且結果相同。 嘗試TryGetItemAsync
時,它具有FileNotFoundException
任何幫助表示贊賞。 我只想知道文件是否存在...
您正在尋找錯誤的地方。 如果文件存在於搜索的文件夾中,則這兩種方法都將起作用。 由於文件在InstalledLocation(嘗試1)或LocalFolder(嘗試2)內部不存在,因此兩個示例均正確失敗。
您從第一種方法獲得的線程已經過時了。 在當時,捕獲異常是唯一的方法。 從那時起就添加了TryGetItemAsync。
StorageFolder.TryGetItemAsync可以在您正在查看的StorageFolder對象中查找文件。 請求的路徑必須相對於文件夾:您無法傳遞完整路徑來嘗試查找不相關的文件。
假設您的應用程序具有適當的文檔文件夾功能,則可以從KnownFolders獲取文檔庫文件夾。 DocumentsLibrary ,然后查找相對於該文件夾的文件:
StorageFolder docs = KnownFolders.DocumentsLibrary;
StorageFile file = docs.TryGetItemAsync("testFiles\\testFile.docx");
這里主要的警告是權限。 DocumentsLibrary文件夾不適合一般使用,您的應用只能在文檔庫中看到與其關聯的類型的文件。 可以使用文件選擇器選擇在何處查找文件,而不是使用文檔庫,也可以將文件保留在ApplicationData.LocalFolder中,以便該應用程序默認具有訪問權限。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.