1

我想一些信息保存到一個文件中ApplicationData.Current.LocalFolder這樣:未經授權的訪問異常8.1

private async Task WriteRecentScores(List<ScoreRecord> list) 
    { 
     try 
     { 
      var serializer = new DataContractJsonSerializer(typeof(List<ScoreRecord>)); 
      using (var stream = await ApplicationData.Current.LocalFolder.OpenStreamForWriteAsync(
          RECENTSCOREFILE, 
          CreationCollisionOption.ReplaceExisting)) 
      { 
       serializer.WriteObject(stream, list); 
      } 
     } 
     catch (Exception ex) 
     { 
      Debug.WriteLine(ex.Message); 
      Debug.WriteLine(ex.StackTrace); 
     } 
    } 

,但是在到達OpenStreamForWriteAsync當我得到一個未經授權的訪問異常。

RECENTSCOREFILE =「score.json」是啓動應用程序的第一次(我使用的是FailIfExists選項)時創建一個文件,下面的代碼

private async void CreateFile() 
    { 
     try 
     { 
      StorageFolder folder = ApplicationData.Current.LocalFolder; 
      StorageFile file = await folder.CreateFileAsync(RECENTSCOREFILE, CreationCollisionOption.FailIfExists); 
     } 
     catch (Exception) { } 

     return; 
    } 

有趣的是,我試圖在模擬器和手機中啓動應用程序,似乎只有在手機上運行時纔會引發異常。

編輯:我想,它只有在我第一次使用與文件(創建文件不需要,因爲它似乎)的作品,但我怎麼能解決這個問題?

+0

你在使用其他地方的文件? - 例如閱讀比分?也許前一個流尚未處理。 – Romasz

+0

是的,我正在從我的應用程序的另一個頁面讀取相同的文件,但我無法分辨爲什麼它只在模擬器中工作 – leqo

+0

您找到了解決方案嗎? – yalematta

回答

0

首先需要定位問題的根源。您可以嘗試調用等待WriteRecentScores方法幾次(相同的方法範圍內)。我想它會正常工作。然後我們可以說問題的根源不在文件修改邏輯本身。

該問題肯定是由於某人在同一時間使用該文件造成的。這可能是由於多次同時無意中調用'Save'方法造成的。例如,經常對HardwareButtons.BackPressed事件進行文件修改,並且如果在退出頁面時取消訂閱未實現,則下次在頁面上按下後退按鈕將導致您的處理程序同時被調用兩次。