1
public void WriteListToFile(Lists lists, string filePath)
    {
        FileStream outFile;
        BinaryFormatter bFormatter = new BinaryFormatter();

        // Ppen file for output
        outFile = new FileStream(filePath, FileMode.Create, FileAccess.Write);

        // Output object to file via serialization
        bFormatter.Serialize(outFile, lists);

        // Close file
        outFile.Close();
    }

データを.datファイルに出力しようとすると、ファイルが既に使用されているというエラーが表示されます。これを修正するにはどうすればよいですか?

EDT: 空のファイルに保存できないことが判明したため、新しい void を作成してデータを入力すると、ファイルを上書き保存できるようになりました。

4

2 に答える 2

5

当面の答えは、「一部のプロセスがファイルに対して持っているロックを解放する」です。

何かが既にファイルを開いています。根本的な原因を見つけるには、そのファイルにアクセスする可能性のあるコードやその他のプロセスを調べる必要があります。

usingステートメントを使用していないことに注意してください。表示されたコード ブロックで例外がスローされた場合、outputFile.Close()は決して実行されず、ファイルを開いたままにします。

次のようにコード(および同様のコード)を書き直してみてください

public void WriteListToFile(Lists lists, string filePath)
{    
    BinaryFormatter bFormatter = new BinaryFormatter();

    // Ppen file for output
    using (FileStream outFile = new FileStream(filePath, FileMode.Create, FileAccess.Write))
    {

        // Output object to file via serialization
        bFormatter.Serialize(outFile, lists);

        // Close file
        outFile.Close();
    }
}

usingキーワードは、

var outFile = new FileStream(filePath, FileMode.Create, FileAccess.Write);
try 
{
    // Do stuff with outFile
}
finally 
{
    outFile.Dispose();
}

outFileまた、例外がスローされたかどうかにかかわらず、確実に破棄されます (これにより、閉じられます)。

于 2013-02-25T21:22:15.350 に答える
0

あなたはこれを試すことができます:

outFile.Dispose();
于 2013-02-25T21:21:50.797 に答える