为什么在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为什么要写两次文件呢?如何避免?

为什么在c#中写入文件总是double

每次都通过在这里使用一个局部变量来重新创建数字:

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);
    }
}