有没有其他方法可以检查 Windows Store 应用中是否存在某个文件?
try
{
var file = await ApplicationData.Current.LocalFolder.GetFileAsync("Test.xml");
//no exception means file exists
}
catch (FileNotFoundException ex)
{
//find out through exception
}
有没有其他方法可以检查 Windows Store 应用中是否存在某个文件?
try
{
var file = await ApplicationData.Current.LocalFolder.GetFileAsync("Test.xml");
//no exception means file exists
}
catch (FileNotFoundException ex)
{
//find out through exception
}
根据此帖的被接受答案,目前没有其他方式。但是,文件IO团队正在考虑更改API,以使其返回null而不是抛出异常。
引用链接帖子中的内容:
目前唯一检查文件是否存在的方法是捕获FileNotFoundException。正如已经指出的那样,显式检查和打开操作是竞态条件,因此我不认为会添加任何文件存在的API。我相信文件IO团队(我不在该团队中,所以我不确定,但这是我听到的)正在考虑如果文件不存在,则使此API返回null而不是抛出异常。
可能这篇文章有点陈旧了,但看起来他们已经改变了你应该如何处理这个问题的方式。
你应该尝试创建文件,如果文件已经存在则回退。可以在这里查看相关文档。我更新这篇文章是因为它是我谷歌搜索这个问题时的第一个搜索结果。
所以,在我的情况下,我想打开一个文件,如果不存在则创建它。我的做法是,先创建文件,如果文件已经存在则打开它。就像这样:
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);
}
这篇文章介绍了如何检查Windows Phone 8和WinRT中的文件是否存在,而无需抛出异常。该方法使用TryGetItemAsync()方法来搜索文件,并根据返回值判断文件是否存在。此外,还提供了示例代码以帮助读者更好地理解如何实现。微软在Windows 8.1的StorageFile中增加了一个新功能,允许用户工程师确定文件是否可访问:IsAvailable
GetFileAttributesExW(path, GetFileExInfoStandard, &info);
return (info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? false: true;
var collection = ApplicationData.Current.LocalFolder.GetFilesAsync()
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
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
}
我尝试使用旧技巧编写自己的代码:
总之,最好坚持异常处理方法。