【问题标题】:How to both read and write a file in C#如何在 C# 中同时读取和写入文件
【发布时间】:2010-10-10 23:30:01
【问题描述】:

我想同时读取和写入文件。这行不通。

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

如何在 C# 中读取和写入文件?

【问题讨论】:

    标签: c# file-io filestream


    【解决方案1】:

    您需要一个单独的流,同时为读取和写入打开。

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

    【讨论】:

    • FileShare.ReadWrite 不是必需的,并且可能是不可取的,它会允许其他应用程序在您使用文件时读取和写入您的文件。通常,在写入文件时首选 FileShare.None,以防止其他人在您处理文件时访问该文件。
    • @ScottS:我同意 ReadWrite 是必要的,因为您可以让构造函数找出共享模式。
    • 谢谢你们!你真的帮了我!
    【解决方案2】:

    不要忘记简单的路线:

        static void Main(string[] args)
        {
            var text = File.ReadAllText(@"C:\words.txt");
            File.WriteAllText(@"C:\words.txt", text + "DERP");
        }
    

    【讨论】:

    • @Copperpot:检查问题中的要求。没有说任何关于锁定的事情。此外,它也没有说明硬盘崩溃或流星撞击中断。
    • 我认为这个问题暗示“同时”。
    • @JohnAtwood 你知道他们对假设的看法。他从来没有选择正确的答案,所以我们永远不会真的知道。
    • @Copperpot:我的解决方案不是您的解决方案,您的问题与 OP 不同或至少解释得更多,但是说我的答案将失败是不正确的。你可能用错了,但这对你来说比答案更重要。
    • 此解决方案的内存占用可能会变得非常大。
    【解决方案3】:
    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。

    【讨论】:

      【解决方案4】:

      这个帖子似乎回答了你的问题:simultaneous-read-write-a-file

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

      【讨论】:

        【解决方案5】:

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

        来检查“Hello”是否存在

        P.S 不要忘记在这段代码后面加上 Console.Readline() sn -p else console 不会出现。

        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();
        

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-06-22
            • 1970-01-01
            • 1970-01-01
            • 2012-08-31
            • 2015-12-02
            • 2015-04-19
            • 1970-01-01
            • 2013-12-17
            相关资源
            最近更新 更多