2014-11-06 65 views
1

我目前正在使用Windows運行時工作,並且遇到了路障,這是一件非常容易做的事情,我感到非常沮喪,這個權利。清除文本文件的內容C#(WinRT)

我一直坐着幾個小時,而我似乎無法把它做對。當我點擊按鈕時,出現「訪問被拒絕錯誤」,在我的代碼的一些變體中,什麼也沒有發生。我覺得答案正在我的臉上。下面是代碼:

private async void btnDtlsSaveChanges(object sender, TappedRoutedEventArgs e) 
{ 
    StorageFile del = await Package.Current.InstalledLocation 
     .GetFileAsync("UserDetails.txt"); 
    await del.DeleteAsync(); 

    StorageFile file = await Package.Current.InstalledLocation.CreateFileAsync 
     ("UserDetails.txt", CreationCollisionOption.OpenIfExists); 

    using (StreamWriter writer = 
     new StreamWriter(await file.OpenStreamForWriteAsync())) 
    { 
     await writer.WriteLineAsync("Hello World");    
    } 
} 

我使用ReplaceExisting,而不是OpenIfExists也試過:

StorageFile file = await Package.Current.InstalledLocation.CreateFileAsync 
    ("UserDetails.txt", CreationCollisionOption.ReplaceExisting); 

using (StreamWriter writer = new StreamWriter(await file.OpenStreamForWriteAsync())) 
{ 
    await writer.WriteLineAsync("Hello World");    
} 

我在幾個方面都試過了,都導致下來的同一軌道,我已經看過每一個相關的問題在堆棧溢出,沒有什麼讓我在那裏。

任何幫助將不勝感激,在此先感謝。

編輯:(解決)我在我的愚蠢和一項新技術的學習實際上並沒有意識到LocalStorage和實際安裝位​​置之間存在差異,這要感謝Rob Caplan指導我朝着正確的方向。

+0

不應方法與'Task'關鍵詞somethign這樣例如裝飾'公共靜態異步任務btnDtlsSaveChanges' – MethodMan 2014-11-06 02:01:39

+1

您正在試圖寫入安裝位置,這是隻讀的。您只應寫入位置,例如[localfolder](http://msdn.microsoft.com/en-us/library/windows/apps/xaml/windows.storage.applicationdata.localfolder.aspx)。 – 2014-11-06 02:24:51

+0

對不起,我花了一段時間才意識到,我非常感謝幫助人員,希望有人學習WinRt有一天會偶然發現並找到一些指導。 – JacoJvV 2014-11-06 07:08:49

回答

0

您可以訪問拒絕,因爲應用程序不必包寫訪問.Current.InstalledLocation。

對於您需要使用您的應用程序數據文件夾的寫權限,如Windows.Storage.ApplicationData.Current.LocalFolder

如果你想出貨您的應用程序與原始數據文件,然後在運行時更新用戶數據的應用程序,你可以從InstalledLocation複製首次運行到LocalFolder。

App data (Windows Runtime apps)Accessing app data with the Windows Runtime (Windows Runtime apps)

+0

我已經使用了LocalFolder和InstalledLocation方法,只是不想包括我在這裏試過的所有代碼,否則它會是一個很長的帖子。 – JacoJvV 2014-11-06 06:18:37

0

我不知道爲什麼你正在使用的await,但下面的代碼應該能夠清除的文件內容爲你

using (StreamWriter sw = new StreamWriter("UserDetails.txt", false)) 
{ 
    sw.WriteLine("Hello world"); 
} 
0

我用了一個按鈕,它測試

點擊按鈕,文件將被清空之後。
您需要使用FileMode.Create,它會創建一個新文件或覆蓋它。

private void button1_Click(object sender, EventArgs e) 
    { 
     using (FileStream NewFileStream = new FileStream(@"C:\Users\Crea\Documents\TCP.txt", FileMode.Create)) 
     { } 
     //using (StreamWriter sw = new StreamWriter(@"C:\Users\Crea\Documents\TCP.txt", true)) 
     // { 
     // sw.WriteLine("Hello"); 
     // } 
    } 
+0

WinRT中不支持Filestream命名空間,否則我很早以前就會這樣做。謝謝你的努力。 – JacoJvV 2014-11-06 06:17:26