1

次のコードがあり、IOExceptionエラーが発生します。別のプロセスで使用されているとのことです。どこかでファイルを開いていません。アプリケーションがファイルを作成します。

これは私のコードです:

機能1では:

System.IO.StreamWriter data = new System.IO.StreamWriter(@"c:\temp.txt");
data.WriteLine(temp);
data.Close()

この後、一時ファイルを処理する2番目の関数が呼び出されます。IOで何かを行う行は次のとおりです。

string[] part = System.IO.File.ReadAllLines(@"c:\temp.txt");

この関数では、string[] partが変更され、最終的な完全なファイルに追加されます。

System.IO.File.AppendAllLines(Datas.Core.outputDir + @"\" + Datas.Core.outputName + ".txt", part);

この関数はファイルをビジー状態に保つと思いSystem.IO.ReadAllLinesますが、ファイルに再度アクセスできるようにコードを変更するにはどうすればよいですか?

4

3 に答える 3

2

このメソッドSystem.IO.File.ReadAllLines()はファイルをビジー状態に保つことはなく、読み取り用にファイルを開き、終了時に自動的に再び閉じます。問題は次の行にある可能性があります

System.IO.File.AppendAllLines(Datas.Core.outputDir + @"\" + Datas.Core.outputName + ".txt", part);

クラスを使用StreamWriterして特定のファイルにテキストを追加または書き込み、後でライター(クラス)を制御する方がよいと思います。

これがサンプルコードです

string Path = @"C:\temp.txt"; // You can change this to anything you would like
StreamWriter _TextWriter = new StreamWriter(Path, true); // change to "false" if you do not want to append

次に、次のいずれかを使用できます。

最後の行にテキストを追加します

_TextWriter.Write("something");

ファイルの最後に新しい行を作成し、最後の行にテキストを追加します

_TextWriter.WriteLine("something");

次にStreamWriter、ファイルの処理が終了したら、次のコードを使用してを閉じます

_TextWriter.Close();

ありがとう、
これがお役に立てば幸いです:)

于 2012-10-20T20:28:29.573 に答える
1

ファイルハンドルを完全に解放するには、data.Dispose()(だけでなく)を呼び出す必要があります。Close

于 2012-10-20T20:52:56.027 に答える
0

System.IO.StreamWriter適切に廃棄されるように、usingステートメントを入力します。

using (System.IO.StreamWriter data = new System.IO.StreamWriter(@"c:\temp.txt"))
{
    data.WriteLine(temp);
}

これがMSDNの例の表示方法です。

于 2012-10-20T20:35:03.893 に答える