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

时间:2014-06-02 02:38:32

标签: c# asp.net writetofile

我将一些结果写入文本文件,我发现它开始使结果加倍,我不知道它发生的时间和地点。 我试过了:

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

2 个答案:

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