簡體   English   中英

如何檢查Windows Universal應用程序中是否存在文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM