我需要操纵文件的内容:
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();
Run Code Online (Sandbox Code Playgroud)
但是,上面附加newString而不是使用新更改覆盖文件.需要这样做,以便在读取写入之间没有其他应用程序可以访问文件,这就是我从FileStream对象创建读取器和编写器的原因.
我知道,你可以创建一个与第二个参数集的StreanWriter虚假描述这里.但是,如上所述创建StreamWriter似乎不是其中一个参数.
Gus*_*dor 19
您遇到的问题是从流中读取进展到文件末尾.然后将附加进一步写入.
这将实现完全覆盖.
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);
}
}
Run Code Online (Sandbox Code Playgroud)
为何使用SetLength?您的新内容可能比现有字符串短!您想要的最后一件事是文件末尾的旧内容.
| 归档时间: |
|
| 查看次数: |
11360 次 |
| 最近记录: |