如何在c#中同时读写文件

时间:2014-09-09 03:45:27

标签: c# io filestream

我需要使用文件来决定绑定我的数据。所以最初我创建的文件包含值“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");
            }
        }
    }
}

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

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:3)

删除行streamReader.Close();就在其他地方{应该修复.. 无论如何,如果你真的想关闭streamReader,你将不得不再次打开文件流     fileStream = File.Open(“test.txt”,FileMode.Open);

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

答案 1 :(得分:1)

尝试

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