gpt4 book ai didi

C# 使用从 FileStream 创建的 StreamWriter 覆盖文件

转载 作者:太空狗 更新时间:2023-10-29 17:32:32 42 4
gpt4 key购买 nike

我需要操作一个文件的内容:

 FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None);               
StreamReader sr = new StreamReader(fs);
StreamWriter sw = new StreamWriter(fs);
newString = someStringTransformation(sr.ReadToEnd());
sw.Write(newString);
fs.flush();
fs.Close();

然而,上面的内容附加了 newString 而不是用新的更改覆盖文件。需要这样做,以便其他应用程序无法在读取写入之间访问该文件,这就是我从 FileStream 对象创建读取器和写入器的原因。

我知道您可以创建一个将第二个参数设置为 false 的 StreanWriter,如所述 here .但是,当如上所述创建 StreamWriter 时,它似乎不是参数之一。

最佳答案

您遇到的问题是从流中读取会前进到文件末尾。然后将追加进一步的写入。

这将实现完全覆盖。

using(FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None))
{
StreamReader sr = new StreamReader(fs);
using (StreamWriter sw = new StreamWriter(fs))
{
newString = someStringTransformation(sr.ReadToEnd());

// discard the contents of the file by setting the length to 0
fs.SetLength(0);

// write the new content
sw.Write(newString);
}
}

为什么要使用 SetLength?您的新内容可能比现有字符串更短!您最不想要的是文件末尾的旧内容。

关于C# 使用从 FileStream 创建的 StreamWriter 覆盖文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33646428/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com