1

だから、私は.txtファイルを作成して、それにいくつかのばかげたデータを書き込もうとしています。しかし、共有違反が発生しています。ファイルを作成した直後にStreamWriterを作成しようとしているためかもしれませんが、それは意味がありません。だから私は少し迷っています。間違った行を除いて、クラス内の他のすべてのStreamWriterとReaderを削除しようとしましたが、それでも違反が発生します。私が得ているエラー、

IOException: Sharing violation on path C:\Users\USER\Desktop\Accessible\Assets\IO\Books\A community of learners\frog\frog_status.txt
System.IO.FileStream..ctor (System.String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, Boolean anonymous, FileOptions options)
System.IO.FileStream..ctor (System.String path, FileMode mode, FileAccess access, FileShare share)
(wrapper remoting-invoke-with-check) System.IO.FileStream:.ctor (string,System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare)

線を指す:

StreamWriter sw = new StreamWriter(statusTxtPath);

次の関数で:

private IEnumerator GatherStatusInfo(string folderPath, string mediaName) {

        string statusTxtPath = folderPath + @"/" + mediaName + "_status.txt";
        _currentInfoBeingCreated._readingStatusTxtPath = statusTxtPath;

        if(BuildManager.instance._isResetStatusFilesWhenStarting) {
            if(File.Exists(statusTxtPath)) 
                File.Delete(statusTxtPath);
        }

        if(!File.Exists(statusTxtPath)) {
            File.Create(statusTxtPath);
            StreamWriter sw = new StreamWriter(statusTxtPath);
            sw.WriteLine(MediaStatus.Unread);
            sw.WriteLine("0");
            _currentInfoBeingCreated._status = MediaStatus.Unread;
            _currentInfoBeingCreated._pageLastRead = 0; 
            sw.Flush();
            sw.Close();

        } else {

            StreamReader statusReader = new StreamReader(statusTxtPath);
            _currentInfoBeingCreated._status = (MediaStatus) Enum.Parse(typeof(MediaStatus), statusReader.ReadLine());
            _currentInfoBeingCreated._pageLastRead = (int) ConversionUtils.instance.String2Float(statusReader.ReadLine());
            statusReader.Close();
        }

        yield return 0;
    }

その犬が狩りをしない理由は何ですか?

4

5 に答える 5

3

ファイルを作成し、再度開いて書き込みたい理由はありますか。StreamWriterには、まさにそれを行うメソッドがあります。存在しない場合は、新しいファイルを作成します。

上記のリンクから:

既定のエンコードとバッファー サイズを使用して、指定したパスにある指定したファイルの StreamWriter クラスの新しいインスタンスを初期化します。ファイルが存在する場合は、上書きまたは追加できます。ファイルが存在しない場合、このコンストラクターは新しいファイルを作成します。

于 2013-01-14T04:29:17.387 に答える
3

StreamWriter消費しなかっFile.Createた が返されたため、ファイルにアクセスできませんでした。FileStream

前述のとおり、File.Createは必要ありません。以下を使用することもできます。

using (var writer = new StreamWriter(File.Create(statusTxtPath)))
{
   // do work here.
}

ファイルストリームを消費して閉じます。ストリームおよびストリームとやり取りするほとんどのクラスを操作するときは常に、必ずusing()ブロックを使用して、ハンドルが適切に解放されるようにしてください。

于 2013-01-14T04:34:52.160 に答える
1

StreamWriterが管理されていないリソースをまだ解放していないために発生している可能性がありますusing。手動で開閉する代わりに、 のブロックを使用してみてください。

using (StreamWriter writer = new StreamWriter(statusTxtPath))
    {
        // do work here
    }
于 2013-01-14T04:26:25.687 に答える