0

我编写了一个控制台应用程序,它本身可以按我的意愿工作。它的主要输出在控制台中效果很好。但是我想将循环内的结果写入文本文件。我已经使用 StreamWriter 来尝试这个,虽然我在编译或运行时没有收到错误,但我的 C: 驱动器中的文件仍然是空白的。谁能发现我错过的任何愚蠢或快速的事情?

如果您能提供帮助,请提前感谢您。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Test2
{
    class Program
    {
        static void Main(string[] args)
        {
            System.IO.StreamWriter file = new System.IO.StreamWriter("c:\\Test.txt");
            double z = 0;
            double x = 1;
            double y = 1;

            Console.WriteLine("How many lines should be written to the file?");
            Console.WriteLine();
            z = double.Parse(System.Console.ReadLine());

            Console.WriteLine("Writing " + z + "lines to file!");
            Console.WriteLine();

            while (z > 0)
            {
                y = Math.Pow(x, 2);
                Console.WriteLine(x + ", " + y*10);
                file.WriteLine(x + ", " + y*10);
                z = z - 1;
                x = x + 1;

            }
            Console.WriteLine();
            Console.WriteLine("**Generation Complete**");
            Console.WriteLine();
            Console.WriteLine("-------------------------------");
            Console.WriteLine();
            Console.WriteLine("**Writing to file successful**");
            Console.WriteLine();
            Console.WriteLine("Press any key to exit.");
            Console.ReadKey();

            file.Close();

        }
    }
}
4

3 回答 3

2

我以前也遇到过类似的问题。如果我没记错的话,解决方案归结为将 StreamWriter 包装在 using 块中,而不是创建它然后尝试关闭它,例如

    static void Main(string[] args)
    {
        using (var file = new System.IO.StreamWriter("c:\\Test.txt"))
        {
        double z = 0;
        double x = 1;
        double y = 1;

        Console.WriteLine("How many lines should be written to the file?");
        Console.WriteLine();
        z = double.Parse(System.Console.ReadLine());

        Console.WriteLine("Writing " + z + "lines to file!");
        Console.WriteLine();

        while (z > 0)
        {
            y = Math.Pow(x, 2);
            Console.WriteLine(x + ", " + y*10);
            file.WriteLine(x + ", " + y*10);
            z = z - 1;
            x = x + 1;

        }
        Console.WriteLine();
        Console.WriteLine("**Generation Complete**");
        Console.WriteLine();
        Console.WriteLine("-------------------------------");
        Console.WriteLine();
        Console.WriteLine("**Writing to file successful**");
        Console.WriteLine();
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();

        }

    }
于 2013-10-29T16:21:28.873 回答
2

using所有IDisposableStreamWriter. 这将确保处置非托管资源(即使发生错误)。AutoFlush如果它的属性false(默认),它也会刷新流。

using(var file = new System.IO.StreamWriter("c:\\Test.txt"))
{
    // ...
    file.WriteLine(x + ", " + y*10);
    // rest of code here ...
}

Stream.Dispose 是否总是调用 Stream.Close(和 Stream.Flush)

于 2013-10-29T16:21:35.017 回答
2

当我运行该代码时,我看到一个异常:

Unhandled Exception: System.UnauthorizedAccessException:
Access to the path 'c:\Test.txt' is denied.

目前尚不清楚你是如何运行它的,但如果它被配置为控制台应用程序并且你从控制台窗口运行它,那么你肯定会看到任何异常,我怀疑你会看到同样的事情。

尝试将其更改为写入您肯定可以访问的某个位置 - 并尝试找出您之前没有看到异常的原因。

此外,使用其他答案显示的语句肯定会更好using- 但这并不能解释没有创建文件的干净运行(无例外)。

于 2013-10-29T16:21:35.220 回答