我知道这可能是重复的,但我发现的关于这个主题的其他问题并没有很好地描述我的问题。
public bool FileExists(string filename)
{
try
{
if (filename != null)
{
// folder where the file is
StorageFolder folder = ApplicationData.Current.LocalFolder;
// check if file exists
if (folder.TryGetItemAsync(filename) != null)
return true;
return false;
}
return false;
}
catch (Exception e)
{
// do stuff
}
}
我的问题是这个方法总是返回true。如果找不到文件,TryGetItemAsync(string name)
应返回null。相反,它返回System.__ComObject
,无论我的参数名称是否是实际文件。
我已经多次检查过我的folder
文件确实存在。
任何人都可以解释它总是返回的行为System.__ComObject
吗?
编辑1 : 更多信息:
在我的main
课程中,我正在测试它:
Debug.WriteLine("Existing file = " + fileUtils.FileExists("Testfile1.txt"));
Debug.WriteLine("Not-Existing file = " + fileUtils.FileExists("Testfile2.txt"));
正如您所看到的,该文件确实存在于该文件夹中(并且我的代码中的文件夹具有指向此文件夹的正确路径):
答案 0 :(得分:2)
folder.TryGetItemAsync()返回存储OPERATION而不是操作结果的TResult对象
获取结果只需使用等待
var result = await folder.TryGetItemsAsync(filename);
或
var tRes = folder.TryGetItemsAsync(filename);
var outputFile = tRes.GetResults();
答案 1 :(得分:1)
TryGetItemAsync是一种异步方法。 如果要获取操作的结果而不是操作本身,则需要使用await关键字。
而不是:
if (folder.TryGetItemAsync(filename) != null)
您可以使用:
var myFile=await folder.TryGetItemAsync(filename)
if(myFile!=null)
答案 2 :(得分:-1)
File.Exists也适用于Windows IOT和Windows。
File.Exists(Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path,"Testfile1.txt");