2013-08-16 48 views
1

所以我一直在做一個簡單的遊戲,我想實現一個高分系統。一旦玩家第一次加載主頁面,就會創建一個新的文本文件(「hsc.txt」),並插入一些假的值,然後由程序分割出來,然而,目前我的代碼會拋出System.IO.IsolatedStorage.IsolatedStorageException和我似乎無法找到問題。我查閱了從「- operation not permitted」消息框中獲得的錯誤,但所有已發佈的解決方案似乎都不起作用。我試圖關閉流,但它似乎沒有工作。windows phone 7隔離存儲 - 操作不允許

任何意見將不勝感激。

private void hasHighscores() 
     { 
     String fileName = "hsc.txt"; 
     using (var isoStorage = IsolatedStorageFile.GetUserStoreForApplication()) 
     { 
      if (!isoStorage.FileExists(fileName)) 
      { 
       isoStorage.CreateFile(fileName); 

         using (var isoStream = new IsolatedStorageFileStream(fileName, FileMode.Append, FileAccess.Write, isoStorage)) 
        { 
         using (var fileStream = new StreamWriter(isoStream)) 
         { 
          fileStream.WriteLine("n1:666,n2:777,n3:888,h1:666,h2:777,h3:888"); 
          fileStream.Close(); 
         } 
         isoStream.Close(); 

        } 
      } 
     } 
    } 

到目前爲止,我有:1)改變了的FileMode二)改變的FileAccess和其他一些「快速修復」,我甚至不記得了。

回答

1

CreateFile方法返回一個流到創建的文件,並保持它打開。因此,當您嘗試在下一行中打開一個流到同一文件的流時,它會引發異常,因爲該文件已被鎖定。

可以按如下方式重寫代碼:

private void hasHighscores() 
{ 
     String fileName = "hsc.txt"; 
     using (var isoStorage = IsolatedStorageFile.GetUserStoreForApplication()) 
     { 
      if (!isoStorage.FileExists(fileName)) 
      { 
       using (var isoStream = isoStorage.CreateFile(fileName)) 
       { 
        using (var fileStream = new StreamWriter(isoStream)) 
        { 
         fileStream.WriteLine("n1:666,n2:777,n3:888,h1:666,h2:777,h3:888"); 
        } 
       } 
      } 
     } 
    } 

我也去掉了stream.Close()說明。當您將該流包含在using語句中時,會自動調用close方法。

+0

謝謝,這個作品完美! – user2111054

相關問題