[英]How to check if file exists in a Windows Store App?
有沒有其他方法可以檢查Windows應用商店應用中是否存在文件?
try
{
var file = await ApplicationData.Current.LocalFolder.GetFileAsync("Test.xml");
//no exception means file exists
}
catch (FileNotFoundException ex)
{
//find out through exception
}
根據這篇文章中接受的答案,目前沒有別的辦法。 但是,File IO團隊正在考慮更改api,以便返回null而不是拋出異常。
從鏈接帖子引用:
目前檢查文件是否存在的唯一方法是捕獲FileNotFoundException。 正如已經指出有一個明確的檢查和開放是一個競爭條件,因此我不希望有任何文件存在API添加。 我相信File IO團隊(我不在那個團隊,所以我不確定,但這是我所聽到的)正在考慮讓這個API返回null而不是拋出,如果該文件不存在。
這可能是舊的,但看起來他們已經改變了他們希望你接近這個的方式。
你應該嘗試制作文件,如果文件已經存在則返回。 這是關於它的文檔。 我正在更新這個,因為這是我在Google上搜索此問題的第一個結果。
因此,在我的情況下,我想打開一個文件,或者如果它不存在則創建它。 我所做的是創建一個文件,如果它已經存在則打開它。 像這樣:
save = await dir.CreateFileAsync(myFile, CreationCollisionOption.OpenIfExists);
我偶然發現了Shashank Yerramilli的這篇博文,提供了更好的答案。
我已經測試了這款適用於Windows Phone 8的功能。 雖然沒有在Windows商店測試過
我在這里復制答案
對於Windows RT應用程序:
public async Task<bool> isFilePresent(string fileName)
{
var item = await ApplicationData.Current.LocalFolder.TryGetItemAsync(fileName);
return item != null;
}
對於Windows Phone 8
public bool IsFilePresent(string fileName)
{
return System.IO.File.Exists(string.Format(@"{0}\{1}", ApplicationData.Current.LocalFolder.Path, fileName);
}
您可以像這樣使用舊的Win32調用來測試目錄是否存在:
GetFileAttributesExW(path, GetFileExInfoStandard, &info);
return (info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? false: true;
它適用於桌面和Metro應用程序: http : //msdn.microsoft.com/en-us/library/windows/desktop/aa364946%28v=vs.85%29.aspx
Microsoft已在Windows 8.1中向StorageFile添加了一項新功能,以允許用戶工程師確定是否可以訪問文件: IsAvailable
另一種檢查方法是通過獲取本地文件夾中的文件
var collection = ApplicationData.Current.LocalFolder.GetFilesAsync()
使用此方法,然后迭代集合中的所有元素並檢查其可用性。
我嘗試使用舊技巧編寫自己的:
總而言之 - 你最好堅持使用異常處理方法。
8.1得到這樣的東西,我試過它有效。
var folder = ApplicationData.Current.LocalFolder;
var file = await folder.TryGetItemAsync("mytext.txt") as IStorageFile;
if (file == null)
{
//do what you want
}
else
{
//do what you want
}
Dim myPath As StorageFolder
If (From i In Await KnownFolders.MusicLibrary.GetFoldersAsync() Where i.Name = "PodBong").Count = 1 Then
myPath = Await KnownFolders.MusicLibrary.GetFolderAsync("PodBong")
Else
myPath = Await KnownFolders.MusicLibrary.CreateFolderAsync("PodBong")
End If
TryGetItemAsync的文檔說:“這個例子展示了如何檢查文件是否存在。” 似乎這個API正式用於此目的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.