2016-09-14 253 views
0

我知道这可能是重复的,但我发现的有关此主题的其他问题没有足够好地描述我的问题。检查文件是否存在于UWP

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

回答

2

folder.TryGetItemAsync()返回TResu其存储操作不动作

的结果来得到的结果只是使用LT对象等待

var result = await folder.TryGetItemsAsync(filename); 

var tRes = folder.TryGetItemsAsync(filename); 
var outputFile = tRes.GetResults(); 
+0

谢谢你的解释,它解决了我的问题:) –

1

TryGetItemAsync是一种异步方法。 如果您想要获取操作的结果而不是操作本身,则需要使用await关键字。

相反的:

if (folder.TryGetItemAsync(filename) != null) 

您可以使用:

var myFile=await folder.TryGetItemAsync(filename) 
if(myFile!=null) 
+0

你是对的,谢谢。但在我的情况下,'FileExists'方法需要是同步方法。这就是为什么我将RTDev的答案标记为公认的答案,因为他展示了一种保持同步的方法。 –

0

File.Exists只是工作在Windows IOT和Windows了。

File.Exists(Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path,"Testfile1.txt");