检查UWP中是否存在文件

时间:2016-09-14 08:06:23

标签: file async-await uwp directory

我知道这可能是重复的,但我发现的关于这个主题的其他问题并没有很好地描述我的问题。

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"));

正如您所看到的,该文件确实存在于该文件夹中(并且我的代码中的文件夹具有指向此文件夹的正确路径): folder

3 个答案:

答案 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");