簡體   English   中英

C# - FileStream:既可以鎖定文件又可以在不截斷文件的情況下讀取文件並將其寫入截斷文件

[英]C# - FileStream: both lock a file and at the same time be able to read it without truncating it and write it with truncating it

我想我的標題不是那么清楚。

我會試着解釋一下:

我可以使用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();
}

這樣,文件的內容被替換,但它沒有鎖定文件。

但我想要兩個。 解決辦法是什么?

在第一個示例中,您需要在寫入流之前重置流以替換文件內容,而不是附加到它:

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

如果將流截斷為0,它也將起作用,無需以字節為單位計算新文件大小。

fs.Seek(0,0);
fs.SetLength(0);

暫無
暫無

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

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