2013-01-21 38 views
2

這是我在這個網站上的第一篇文章,我搜索高和廣泛,讓我的代碼工作。 就像標題所說,這是一個WinRT應用程序,我在使用File IO時遇到了困難。我想要做的是讀取存儲在應用程序安裝目錄內的文件夾中的文本文件,該文件包含我將輸入列表<>中的數據行。C#Windows應用商店應用程序 - 文件IO使用異步/等待導致超時和InvalidOperationException

public static async void GetStations() 
    { 
     try 
     { 
      using (var stream = await Windows.Storage.ApplicationData.Current.LocalFolder.OpenStreamForReadAsync(@"MyApp\Data\file.txt")) 
      { 
       using (var streamReader = new StreamReader(stream)) 
       { 
        while (streamReader.Peek() >= 0) 
        { 
         string line = await streamReader.ReadLineAsync(); 
         //do something with 
        } 
       } 

      } 
     } 
     catch (Exception e) 
     { 
      ... 
     } 
     finally 
     { 
      ... 
     } 
    } 

問題是我試圖運行它時收到文件未找到錯誤。誰能幫忙?如果您需要我發佈更多信息,我可以... 提前致謝。

+0

嘗試「\\ Data \\ file.txt」 – CR41G14

+0

^對不起...發生同樣的錯誤。 – kpfogey

回答

3

如果您將文件作爲應用程序包的一部分發布,那麼Package.Current.InstalledLocation是正確的位置。 ApplicationData.Current.LocalFolder只包含您的應用程序放在那裏的文件。

正確的代碼是:

public static async void GetStations() 
{ 
    try 
    { 
     using (var stream = await Windows.ApplicationModel.Package.Current.InstalledLocation.OpenStreamForReadAsync(@"Data\file.txt")) 
     { 
      using (var streamReader = new StreamReader(stream)) 
      { 
       while (streamReader.Peek() >= 0) 
       { 
        string line = await streamReader.ReadLineAsync(); 
        //do something with 
       } 
      } 

     } 
    } 
    catch (Exception e) 
    { 
     //... 
    } 
    finally 
    { 
     //... 
    } 
} 

該文件將在你的項目Data文件夾內,並有Build Action設置爲Content必須包括在內。

+0

我還在得到System.IO.FileNotFoundException錯誤 該文件設置爲內​​容和複製到輸出目錄設置爲始終 – kpfogey

+0

@kpfogey您是否將文件包含在您的項目中,如我在代碼中所述?我創建了一個可從[這裏]下載的工作示例應用程序(https://dl.dropbox.com/u/10676122/App19.zip)。 –

+0

好吧,我嘗試了你給我的代碼,它確實有效...我的應用程序錯誤的東西。 您使用它的地方是否重要?它可以在頁面加載或頁面構造函數中使用而不是事件? – kpfogey

0

而是開放的,從ApplicationData,你可能需要:

Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync 

這將讓,而不是應用程序的數據文件夾中的包的安裝文件夾中的文件。

相關問題