C# 使用StreamWriter C写入后目标文件为空#

C# 使用StreamWriter C写入后目标文件为空#,c#,streamwriter,C#,Streamwriter,我已经编写了一个控制台应用程序,它本身正在按我所希望的那样工作。它的主要输出在控制台中工作得很好。但是循环中的结果我想写入一个文本文件。我已经使用StreamWriter尝试了这一点,尽管我在编译或运行时没有收到任何错误,但我的C:驱动器中的文件仍然为空。有人能发现我错过的任何愚蠢或快速的事情吗 如果你能帮忙,先谢谢你 using System; using System.Collections.Generic; using System.Linq; using System.Text; usi

我已经编写了一个控制台应用程序,它本身正在按我所希望的那样工作。它的主要输出在控制台中工作得很好。但是循环中的结果我想写入一个文本文件。我已经使用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();

        }
    }
}

我以前也遇到过类似的问题。如果我没记错的话,解决方案归结为将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();

        }

    }

我以前也遇到过类似的问题。如果我没记错的话,解决方案归结为将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();

        }

    }

对实现
IDisposable
的所有内容使用
using
statament,如
StreamWriter
。这将确保释放非托管资源(,即使出现错误)。如果流为
false
(默认值),它还将刷新流


对于实现
IDisposable
的所有内容,如
StreamWriter
使用
statement。这将确保释放非托管资源(,即使出现错误)。如果流为
false
(默认值),它还将刷新流


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

Unhandled Exception: System.UnauthorizedAccessException:
Access to the path 'c:\Test.txt' is denied.
现在还不清楚您是如何运行它的,但是如果它被配置为一个控制台应用程序,并且您从控制台窗口运行它,那么您肯定会看到任何异常,我怀疑您也会看到同样的情况

试着把它改为写到你肯定有权访问的地方,也试着找出你以前没有看到异常的原因


此外,正如其他答案所示,使用
using
语句肯定会更好,但这不能解释在不创建文件的情况下进行干净运行(无异常)。

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

Unhandled Exception: System.UnauthorizedAccessException:
Access to the path 'c:\Test.txt' is denied.
现在还不清楚您是如何运行它的,但是如果它被配置为一个控制台应用程序,并且您从控制台窗口运行它,那么您肯定会看到任何异常,我怀疑您也会看到同样的情况

试着把它改为写到你肯定有权访问的地方,也试着找出你以前没有看到异常的原因


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

@DaveDev,Jon Skeet和其他人。谢谢你的回复。此时,我确信在创建文件时不会出现权限问题。但当我打开时,它是空白的。这包括使用“using”语句。有什么想法吗?忽略。现在工作很好。“太谢谢大家了,谁知道怎么了?”达维杰夫、乔恩·斯基特和其他人说。谢谢你的回复。此时,我确信在创建文件时不会出现权限问题。但当我打开时,它是空白的。这包括使用“using”语句。有什么想法吗?忽略。现在工作很好。非常感谢大家知道怎么了吗?谢谢,请看我上面的回复:)谢谢,请看我上面的回复:)如果代码运行时没有异常,那么使用
语句添加
是没有帮助的。这仍然是一个好主意,但这并不能解释他们为什么会看到一个空白文件,IMO。如果代码运行时没有异常,那么使用
语句添加一个
,将不会有帮助。这仍然是个好主意,但这并不能解释为什么他们看到一个空白文件,IMO。