簡體   English   中英

如何在C#中同時讀取和寫入文件

[英]How to read and write to file at the same time in c#

我需要使用文件來決定綁定數據。 因此,最初我創建一個包含值“ NO”的文件。 第一次讀取代碼時,它將數據綁定到中繼器上以顯示,然后將文件中的值更改為“是”。 當它再次運行(由於重新加載頁面)時,它讀取值“ 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上閱讀了一些方法,但未能針對該算法實現它。

有人可以幫我嗎?

刪除行streamReader.Close(); 緊接着else {應該是固定的。。無論如何,如果您確實要關閉streamReader,則必須再次打開文件流
fileStream = File.Open(“ test.txt”,FileMode.Open);

當然,您可能希望將fileStream用作局部變量,而不要使用。

嘗試

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM