1

重複の可能性:
File.Create() を使用した後、ファイルが別のプロセスによって使用されている

ファイルにテキストを追加するメソッドがあります。テキストを追加する前に、ファイルが存在するかどうかを確認します。存在しない場合は、作成してから、以下に示すように続行します。

if(!File.Exists(_someFile))
    File.Create(_someFile);

using (StreamWriter file = File.AppendText(_someFile))
{          
    file.WriteLine("some text");
}

ファイルが存在する場合は問題ありません。ファイルが更新されます。ファイルが存在せず、ファイルが作成されると、別のプロセスがファイルを使用していることを示す「using」行で IO 例外がスローされます。プロセス エクスプローラーを使用して、ファイルを使用しているものを見つけようとしましたが、結果は「存在しないプロセス」です。何が起こっているのか、この問題を解決する方法を知っている人はいますか?

編集:問題は解決しました

最初に検索したとき、このサイトで私の問題に関する質問を見つけることができませんでした。質問を投稿するとすぐに、右側の「関連する質問」で正確な問題が解決されていることがわかりました。ソリューションへのリンク: File.Create() を使用した後に別のプロセスで使用されているファイル 重複を投稿して申し訳ありません。私の問題は解決しました。

4

2 に答える 2

7

これはFile.Create(_someFile);、新しく作成されたファイルを使用する前に閉じる必要があるファイル ストリームを開くために発生します。これを試して:

if(!File.Exists(_someFile))
{
    using (var stream = File.Create(_someFile))
}
using (StreamWriter file = File.AppendText(_someFile))
{          
    file.WriteLine("some text");
}

しかし実際には、最初にファイルを確認して作成する必要はありません。StreamWriterは、ファイルが存在しない場合はファイルを作成し、存在する場合はテキストを追加します。

using (StreamWriter sw = new StreamWriter(_someFile, true))
{
    file.WriteLine("some text");
}
于 2013-01-10T12:46:18.957 に答える
1

ウラドの答えは正しい。ファイルが存在しない場合はファイルを作成し、存在する場合はファイルに追加する必要があるため、次の簡単な解決策があります。

        string _someFile = @"C:\somefile.txt";
        TextWriter tw = new StreamWriter(_someFile, true); // append == true
        tw.WriteLine("some text");
        tw.Close();
于 2013-01-10T13:04:36.177 に答える