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 创建所需的任何 Stream/String/Binary Reader/Writers。

于 2009-04-08T04:54:06.223 回答
2

该线程似乎回答了您的问题:同时读取写入文件

基本上,您需要声明两个 FileStream,一个用于读取操作,另一个用于写入操作。Writer Filestream 需要以“追加”模式打开您的文件。

于 2012-06-27T11:08:26.287 回答
1

您可以试试这个:每次运行此代码时,都会在 bin->debug 文件夹中自动创建“Filename.txt”文件,或者您可以指定文件的路径,例如:@“C:/...”。您可以通过转到 bin -->debug 文件夹来检查“Hello”是否存在

PS 不要忘记在此代码段之后添加 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();
于 2019-07-21T17:01:16.453 回答
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 回答