为什么在c#中写入文件总是double
本文关键字:文件 double 为什么 | 更新日期: 2023-09-27 18:06:14
我写了一些结果到文本文件,我认识到它开始翻倍的结果,我不知道从何时何地发生的。我试着:
//test how manytime running the file writing:
int h = 0;
using (StreamWriter _testData = new StreamWriter(Server.MapPath("~/File.txt"), true))
{
_testData.WriteLine(h); // Write the file.
}
h = h + 1;
打开文件,我将看到:
0
0
所以我很确定它写入文件两次,而不是写入文件运行两次(如果运行两次,那么结果将是:0,1 .
我也试过:
int k = 0;
using (StreamWriter sw = File.AppendText(Server.MapPath("~/File.txt")))
{
sw.Write(k);
sw.Close();
}
k=k+1;
但我也得到在文件:0 0为什么要写两次文件呢?如何避免?
每次都通过在这里使用一个局部变量来重新创建数字:
int h = 0;
每次你写…写的是0
..因为是你让它这么做的。
也许你真正想要的…是加载最后一个数字并加上一个:
int h = 0;
if (File.Exists(Server.MapPath("~/File.txt"))) {
h = Convert.ToInt32(File.ReadAllLines(Server.MapPath("~/File.txt"))
.Reverse()
.First()) + 1;
}
// h is now 0 if no file exists.. or that last number + 1 if the file did exist.
这显然不执行任何错误检查,但它应该给你一个想法。
您看到第二个0是因为您没有在执行程序之间清除文件。然而,是一组奇怪的环境把你带到了这个结果。我相信你可能有这个问题,由于使用功能Write()
和WriteLine()
的组合,而不是在执行之间清除文件。使用WriteLine()
函数将在文件中添加'n换行字符,并将文件指针留在第二行的那个位置。然后可能调用函数Write()
,然后在第二行放置一个0。所以有两个0。我建议您在每次写入文件时清除该文件,除非您只是想对其进行追加。
为此,您可以在using块中初始化StreamWriter,该块使用文件流将fileMode设置为截断而不是追加:
int k = 0;
using (var stream = new FileStream(path, FileMode.Truncate))
{
using (var writer = new StreamWriter(stream))
{
writer.Write(k);
}
}