【问题标题】:How to read and write to file at the same time in c#如何在c#中同时读取和写入文件
【发布时间】:2014-09-09 03:45:27
【问题描述】:

我需要使用文件来决定绑定我的数据。所以最初我创建了一个包含值“NO”的文件。当代码第一次读取它时,它会将数据绑定到转发器以显示,然后将文件中的值更改为“YES”。再次运行时(由于页面重新加载),读取值为“YES”,表示数据已经绑定,不再绑定数据,将文件内容更改为“NO”,原样运行结束。

这是我尝试过的:

// Use file to make binding data decision, 
//  avoid duplicate binding due to page reload:
using (var fileStream = 
    File.Open(Server.MapPath("~/binddecision.txt"), FileMode.Open))
{
    // read from the file
    using (var streamReader = new StreamReader(fileStream))
    {
        string line = streamReader.ReadLine();
        if (line == "NO")
        {
            companyRepeater.DataSource = companies1;
            companyRepeater.DataBind();

            LinkRepeater.DataSource = urls;
            LinkRepeater.DataBind();

            fileStream.SetLength(0); // truncate the file
            // If now is not record a loop yet, then write YES to the file
            using (var streamWriter = new StreamWriter(fileStream))
            {
                streamWriter.WriteLine("YES");
            }
        }
        else
        {
            streamReader.Close();
            // If now is a loop then write NO to the file
            using (var streamWriter = new StreamWriter(fileStream))
            {
                streamWriter.WriteLine("NO");
            }
        }
    }
}

但它仍然显示有关使用冲突的流的错误。我在 google 上阅读了一些方法,但未能为该算法实现它。

谁能帮帮我?

【问题讨论】:

  • 你或我的帖子 Chandra 有什么问题?
  • 刚刚改进了格式,在我更改之前它在左侧占用了很多空间
  • 好的,谢谢!你的努力值得我的帖子感谢还是减分?以积极的方式去做!
  • 我不明白这里到底发生了什么。你认为我是那个否决了这个问题的人吗?我没有。如果这就是全部。如果没有,您需要知道 SO 是 collaborative edit 以帮助改进网站。
  • 是的,我以为你编辑并否决了它!对不起假设错误!不知道原因被否决真的很烦人,下次我没办法改进它,它的功能很无用!

标签: c# io filestream


【解决方案1】:

删除行streamReader.Close();就在 else{ 之后它应该被修复.. 无论如何,如果你真的想关闭streamReader,你将不得不再次打开文件流
fileStream = File.Open("test.txt", FileMode.Open);

当然,您可能希望将 fileStream 作为局部变量而不是在使用中。

【讨论】:

  • 为什么我看不到文件被覆盖?我使用 fileStream.SetLength(0) 截断它。但是当我在运行后打开文件时,我看到“YES”和“NO”都写在不同的行中。我想要的只是“是”或“否”。每次都应该覆盖每个旧的。
  • 现在很好,只需将截断行移至写入数据部分!谢谢!
【解决方案2】:

试试

File.Open(Server.MapPath("~/binddecision.txt"), FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite)

这是一个简化的例子:

using System;
using System.IO;
using System.Threading;
using System.Threading.Tasks;

class Program
{
   static void Main(string[] args)
   {
      // Use file to make binding data decision, 
      //  avoid duplicate binding due to page reload:
      using (var fileStream =
          File.Open("a.txt", FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite))
      {
         // read from the file
         var streamReader = new StreamReader(fileStream);
         string line = streamReader.ReadLine();
         if (line == "NO")
         {
            using (var streamWriter = new StreamWriter(fileStream))
            {
               streamWriter.WriteLine("YES");
               streamWriter.Close();
            }
         }
         else
         {
            // If now is a loop then write NO to the file
            using (var streamWriter = new StreamWriter(fileStream))
            {
               streamWriter.WriteLine("NO");
               streamWriter.Close();
            }
         }
      }
   }
}

【讨论】:

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