web-dev-qa-db-ja.com

C#でファイルを読み書きする方法

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

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

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

65
Hey

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

FileStream fileStream = new FileStream(
      @"c:\words.txt", FileMode.OpenOrCreate, 
      FileAccess.ReadWrite, FileShare.None);
74
MikeW

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

    static void Main(string[] args)
    {
        var text = File.ReadAllText(@"C:\words.txt");
        File.WriteAllText(@"C:\words.txt", text + "DERP");
    }
63
Will
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を使用して、必要なStream/String/Binary Reader/Writerを作成できます。

33
ScottS

このスレッドはあなたの質問に答えているようです: simultaneous-read-write-a-file

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

2
mbarthelemy

これを試すことができます:「Filename.txt」ファイルは、このコードを実行するたびにbin-> debugフォルダーに自動的に作成されます。または、@ "C:/ ..."のようなファイルのパスを指定できます。 bin-> debugフォルダーに移動して、「Hello」の存在を確認できます。

P.Sは、このコードスニペットの後にConsole.Readline()を追加することを忘れないでください。そうしないと、コンソールは表示されません。

TextWriter tw = new StreamWriter("filename.txt");
        String text = "Hello";
        tw.WriteLine(text);
        tw.Close();

        TextReader tr = new StreamReader("filename.txt");
        Console.WriteLine(tr.ReadLine());
        tr.Close();
1
Ipsita Paul

@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");
0
Anonimys