1

重複の可能性:
C#でファイルの読み取り/書き込みの両方を行う方法

同じテキスト ファイルとの間でテキストを読み書きしたいと考えています。ここにコードがあります

TextWriter notesWriter = new StreamWriter("text.txt");
TextReader notesReader; = new StreamReader("text.txt"); 

ファイルが書き込み用に開かれると、ファイルはロックされ、読み取りができなくなります。したがって、いくつかの例外がスローされます。

別のプロセスで使用されているため、プロセスはファイル 'text.txt' にアクセスできません。

これの回避策は何ですか? ありがとうございました。

編集:テキストボックス内のテキストを変更してファイルに保存し、テキストボックスにテキストを設定する必要があるときにそれを読みたいとします。

4

5 に答える 5

0

次のようなものを試してください

using(TextWriter notesWriter = new StreamWriter("text.txt"))
{
//do write-things here
}

クロージングブレーキの後、Streamwriterは破棄され、ファイルを読み取ることができます。

于 2012-10-16T14:07:49.623 に答える
0

回避策はそれを行わないことです。技術的にはこれを行うことができますが、ファイル共有を修正したとしても、同じものを読み返していることを意味するため、(ストリームセマンティクスを使用してファイルにアクセスすることによって)やりたい方法を正しくすることはほとんど不可能です。あなたは無限ループで書いた。

ページングベースのファイルアクセスメタファーを使用できますが、これもまた、実行したいことはほとんどありません。

最も可能性の高いオプションは、別のファイル、元のファイルの(変更された?)コピーに書き込み、そのコピーを元のファイルと交換することです。

于 2012-10-16T14:07:50.157 に答える
0

データを保存するために使用される標準のテキストファイルでは、ほとんどの場合、安全/困難/役に立たないためClose、書き込みと読み取りを同時に行う必要がない限り、書き込みを完了するたびにファイルを作成する必要があります

于 2012-10-16T14:05:22.050 に答える
0

確かに、同時に読み取りと書き込みを行うことができますが、必要な参照は 1 つだけです。

Stream l_fileStream = File.Open( "text.txt", FileMode.Open, FileAccess.ReadWrite );

http://msdn.microsoft.com/en-us/library/s67691sb.aspx

これで、ファイルの読み取り/書き込みができるようになりました:

StreamReader l_reader = new StreamReader( l_fileStream );
StreamWriter l_writer = new StreamWriter( l_fileStream );

なぜこれをしたいのですか?何も思いつきません。次の操作を開始する前に、1 つの操作を終了したいように思えますが、実際のバイト配列 (高度なページング システムなど) を汚したくない場合は、プルする経験レベルに達していない可能性があります。そのようなことはありません。

于 2012-10-16T14:09:14.773 に答える
0

編集を考慮して、同時に読み取りと書き込みを行う必要はありません。

  • アプリケーションを開く
  • ファイルを読み取ります。ファイルの内容をテキストボックスに入れます。ファイルを閉じる
  • テキストボックスの内容をファイルに保存します。ファイルを閉じます。

ご覧のとおり、使用の合間にファイルを閉じれば、同時に読み取りと書き込みを行う必要はありません。

于 2012-10-16T14:12:35.127 に答える