2016-09-14 254 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");