1

だから私は単純なゲームに取り組んでいて、ハイスコア システムを実装したいと考えていました。プレーヤーが初めてメイン ページをロードすると、新しいテキスト ファイル ("hsc.txt") が作成され、後でプログラムによって分割されるいくつかの偽の値が挿入されますが、現在、私のコードは a をスローしSystem.IO.IsolatedStorage.IsolatedStorageException、私は問題が見つからないようです。メッセージ ボックスから表示された " " というエラーを調べましたが、- operation not permitted投稿されたすべての解決策が機能していないようです。ストリームを閉じようとしましたが、うまくいかないようです。

アドバイスをいただければ幸いです。

 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();

                    }
            }
        }  
    }

これまでのところ、a) FileMode を変更しました。b) FileAccess と、覚えていない他のいくつかの「クイックフィックス」を変更しました。

4

1 に答える 1

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 メソッドが自動的に呼び出されます。

于 2013-08-16T11:16:56.490 に答える