我将一些结果写入文本文件,我发现它开始使结果加倍,我不知道它发生的时间和地点。 我试过了:
//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 那么为什么要写两次文件呢?如何避免呢?
答案 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.
这显然不会执行任何错误检查,但它应该给你一个想法。
答案 1 :(得分:0)
您看到第二个0,因为您没有在程序执行之间清除文件。然而,这是一组奇怪的情况让你得到了这个结果。我相信你可能遇到了这个问题,因为结合使用函数Write()
和WriteLine()
而没有在执行之间清除文件。使用函数WriteLine()
会将\ n换行符添加到文件中,并将文件指针留在第二行的该位置。然后你可能会调用函数Write()
,然后在第二行放置一个0。因此你有两个0。我建议每次写文件时清除文件,除非你想简单地追加它。
为此,您可以在使用文件流的使用块内初始化StreamWriter,以将fileMode设置为截断而不是追加:
int k = 0;
using (var stream = new FileStream(path, FileMode.Truncate))
{
using (var writer = new StreamWriter(stream))
{
writer.Write(k);
}
}