73

ファイルの読み取りと書き込みの両方を行いたい。これは機能しません。

static void Main(string[] args)
{
    StreamReader sr = new StreamReader(@"C:\words.txt");
    StreamWriter sw = new StreamWriter(@"C:\words.txt");
}

C#でファイルの読み取りと書き込みの両方を行うにはどうすればよいですか?

4

6 に答える 6

81

読み取りと書き込みの両方のために開かれた単一のストリームが必要です。

FileStream fileStream = new FileStream(
      @"c:\words.txt", FileMode.OpenOrCreate, 
      FileAccess.ReadWrite, FileShare.None);
于 2009-03-03T09:27:41.660 に答える
68

簡単なルートを忘れないでください:

    static void Main(string[] args)
    {
        var text = File.ReadAllText(@"C:\words.txt");
        File.WriteAllText(@"C:\words.txt", text + "DERP");
    }
于 2010-09-29T11:52:03.557 に答える
37
var fs = File.Open("file.name", FileMode.OpenOrCreate, FileAccess.ReadWrite);
var sw = new StreamWriter(fs);
var sr = new StreamReader(fs);

...

fs.Close();
//or sw.Close();

重要なことは、FileAccess.ReadWrite フラグを付けてファイルを開くことです。その後、最初の FileStream を使用して、必要なストリーム/文字列/バイナリ リーダー/ライターを作成できます。

于 2009-04-08T04:54:06.223 に答える
2

このスレッドはあなたの質問に答えるようです:同時読み取り書き込みファイル

基本的に必要なのは、2 つの FileStream を宣言することです。1 つは読み取り操作用、もう 1 つは書き込み操作用です。Writer Filestream は、「追加」モードでファイルを開く必要があります。

于 2012-06-27T11:08:26.287 に答える
1

@Ipsita によって改善コードが作成されました -非同期の読み取り/書き込みファイル I/Oを使用するため

readonly string logPath = @"FilePath";
...
public async Task WriteToLogAsync(string dataToWrite)
{
    TextReader tr = new StreamReader(logPath);
    string data = await tr.ReadLineAsync();
    tr.Close();

    TextWriter tw = new StreamWriter(logPath);
    await tw.WriteLineAsync(data + dataToWrite);
    tw.Close();
}
...
await WriteToLogAsync("Write this to file");
于 2019-08-28T22:33:01.817 に答える