有人可以在覆盖文本文件的第一行时解释这种现象吗?
Can someone explain this phenomenon when overwriting the first line of a text file?
我正在做一个项目,用户可以在其中查看句子短语和 select 句子中特定单词的特定含义(描述它的最佳方式)。我需要做的部分工作是保存当前句子的索引 selected,以便在重新打开程序时,用户可以从他们离开的地方 return。那很容易。
但是,我在尝试覆盖保存他们工作的文件的第一行时遇到了一个问题(它包含查看的最后一句话的索引),即它删除了下一行(部分或其他)。迄今为止我发现的最好的(即唯一的)解决方案是重写整个文件,但我仍然想知道幕后发生了什么。
本质上,我首先将以下内容写入文本文件:
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]);
}
"phenomenon" 是你在用人类的方式思考文件,在那里你看到换行符,但 StreamWriter
是按字节操作的。您最初有这一系列字节(注意回车 return 和新行):
[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]
我正在做一个项目,用户可以在其中查看句子短语和 select 句子中特定单词的特定含义(描述它的最佳方式)。我需要做的部分工作是保存当前句子的索引 selected,以便在重新打开程序时,用户可以从他们离开的地方 return。那很容易。
但是,我在尝试覆盖保存他们工作的文件的第一行时遇到了一个问题(它包含查看的最后一句话的索引),即它删除了下一行(部分或其他)。迄今为止我发现的最好的(即唯一的)解决方案是重写整个文件,但我仍然想知道幕后发生了什么。
本质上,我首先将以下内容写入文本文件:
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]);
}
"phenomenon" 是你在用人类的方式思考文件,在那里你看到换行符,但 StreamWriter
是按字节操作的。您最初有这一系列字节(注意回车 return 和新行):
[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]