我需要使用文件来决定绑定我的数据。所以最初我创建的文件包含值“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");
}
}
}
}
但它仍然显示有关使用冲突的流的错误。我在谷歌上阅读了一些方法,但未能为此算法实现它。
有人可以帮助我吗?
答案 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();
}
}
}
}
}