我想我的标题不是很清楚。
我会试着解释一下:
我可以使用FileStream
编写和读取文件FileStream fs = new FileStream("C:\\Users\\Public\\text.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None);
private void button1_Click(object sender, EventArgs e)
{
fs.Seek(0,0);
StreamReader sr = new StreamReader(fs);
textbox.Text = sr.ReadToEnd();
}
private void button2_Click(object sender, EventArgs e)
{
StreamWriter sw = new StreamWriter(fs);
sw.Write(textbox.Text);
sw.Flush();
}
这种方式其他程序无法使用该文件,但我也无法删除内容。写入它只会添加字符串,它不会替换内容。
或者我可以在没有FileStream的情况下完成:
private void button1_Click(object sender, EventArgs e)
{
StreamReader sr = new StreamReader("C:\\Users\\Public\\text.txt");
textBox1.Text = sr.ReadToEnd();
sr.Close();
}
private void button2_Click(object sender, EventArgs e)
{
StreamWriter sw = new StreamWriter("C:\\Users\\Public\\text.txt", false);
sw.Write(textBox1.Text);
sw.Close();
}
这样,文件的内容就会被替换,但它没有锁定文件。
但我想要两个。解决方案是什么?
答案 0 :(得分:14)
在第一个示例中,您需要在写入流之前重置流以替换文件内容,而不是附加到它:
private void button2_Click(object sender, EventArgs e)
{
fs.Seek(0,0);
fs.SetLength(Encoding.UTF8.GetBytes(textbox.Text).Length));
StreamWriter sw = new StreamWriter(fs);
sw.Write(textbox.Text);
sw.Flush();
}
答案 1 :(得分:1)
如果将流截断为0,它也可以工作,无需以字节为单位计算新文件大小。
fs.Seek(0,0);
fs.SetLength(0);