我正在做一个项目,用户可以在其中查看句子短语并选择句子中特定单词的特定含义(描述它的最佳方式)。我需要做的部分工作是保存当前所选句子的索引,以便在重新打开程序时,用户可以从上次中断的地方返回。那很简单。
但是,在尝试覆盖保存其工作的文件的第一行(它包含查看的最后一句话的索引)时,我遇到了一个问题,即它会擦除下一行(部分或以其他方式)。迄今为止我发现的最好(即唯一)解决方案是重写整个文件,但我仍然想知道幕后发生了什么。
本质上,我首先将以下内容写入文本文件:
Andrew
ate
breakfast
然后我用 WriteLine 用“Andrew 122”覆盖了第一行,得到以下结果:
Andrew 122
breakfast
使用Write,我得到了这个:
Andrew 122e
breakfast
有没有人可以向我解释发生了什么?
(作为参考,这是我用来测试的代码:
static void Main(string[] args)
{
string path = String.Format(@"C:\Users\User\Desktop\{0} Project\test.txt", @"C#");
if (File.Exists(path))
File.Delete(path);
WriteToFile(path, true, "Andrew", "ate", "breakfast");
WriteToFile(path, false, "Andrew 122");
}
public static void WriteToFile(string path, bool newLine, params string[] line)
{
using (FileStream fStream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write))
using (StreamWriter fWriter = new StreamWriter(fStream, Encoding.UTF8))
for (int i = 0; i < line.Length; i++)
if (newLine)
fWriter.WriteLine(line[i]);
else
fWriter.Write(line[i]);
}
“现象”是您正在以人类的方式思考文件,您会看到换行符,但StreamWriter
正在对字节进行操作。您最初有这一系列字节(注意回车和换行):
[A][n][d][r][e][w][\r][\n][a][t][e][\r][\n][b][r][e][a][k][f][a][s][t]
然后你用“122”覆盖字节 7-10
[A][n][d][r][e][w][ ][ 1][2][2][e][\r][\n][b][r][e][a][k][f][a][s][t]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句