我以爲這將是非常簡單的存在,它可能是,和我只是找錯了地方,但這裏是我已經試過如何檢查文件是否在Windows通用應用程序
我想檢查一個文件是否存在。這是用戶從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;
}
}
這總是返回假。我試過用很多方式設置文件名,但沒有運氣。我認爲這是最接近正確的,但我不能走到最後。
TRY 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
任何幫助表示讚賞。我只想知道文件是否存在...
謝謝你的精彩答案。我確實有一個後續問題。此應用程序旨在允許用戶設置自己的文件位置。我使用''FileOpenPicker'''和''Winddows.Storage.StorageFile'''來獲得他們想要使用的特定文件路徑。有沒有辦法不必使用相對路徑,因爲我不能確定他們將要選擇的文件的位置? – trueCamelType
您需要使用相對路徑,但您可以比較用戶選擇的文件夾(假設它有一條路徑 - 並非全部都是這樣)與目標。該應用只能訪問拾取文件夾中的路徑。 –
以防其他人發現此情況。這個問題在[這裏]詳細討論(http://stackoverflow.com/questions/3137097/how-to-check-if-a-string-is-a-valid-windows-directory-folder-path)。 – trueCamelType