C# 在使用 StreamWriter 时得到空的 .txt

Posted

技术标签:

【中文标题】C# 在使用 StreamWriter 时得到空的 .txt【英文标题】:C# getting empty .txt while using StreamWriter 【发布时间】:2013-12-08 00:56:57 【问题描述】:

我对 c# system.IO 命名空间的 StreamWriter 方法有疑问。我想将几行数据保存到 .txt 文件中,但我得到的文件总是空的。

我的方法:

public class Statystyki

public void save(string path, Central cent)
        
            StreamWriter stream = new StreamWriter(path);
            stream.WriteLine("Something one: "+cent.number1);
            stream.WriteLine("Something two: "+cent.number2);
        

我的主要:

Central newcentral = new Central();
Statystyki stats = new Statystyki();
savepath="c:\projects\central.txt";
statsy.save(savepath, newcentral);

我尝试了很多解决方案,但没有一个奏效。有什么问题?

非常感谢。

【问题讨论】:

你的 FileStream 类在哪里?显示你的完整代码。 【参考方案1】:

使用File.WriteAllLines 方法会更容易(在静态类File 中,也在System.IO 中):

File.WriteAllLines(path, 
    new[]  "Something one: "+ cent.number1, "Something two: "+ cent.number2 );

它会为您管理所有可能的错误和处理。

【讨论】:

【参考方案2】:

使用它:

stream.AutoFlush = true;

【讨论】:

【参考方案3】:

您的字符串变量很可能不正确。在 C# 中,您必须提供双斜杠,除非您使用逐字。这是我写的一个简单的例子。

using (StreamWriter writer = new StreamWriter(@"C:\Users\Brandon\Desktop\text111.txt"))
        
            writer.WriteLine("something 1");
            writer.WriteLine("something 2");
            writer.Flush();
            writer.Dispose();
        

【讨论】:

【参考方案4】:

这是一个完整的程序。100% 工作,但控制台版本。试试这个并根据您的需要修改您的代码。

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;

namespace book_StreamWriter

    class FileWrite
    
        public void writeData()
        
           using(FileStream fs =
                new FileStream(@"D:\myfile2.txt",
                                FileMode.Append, FileAccess.Write))
           
              StreamWriter sw = new StreamWriter(fs);
              Console.WriteLine("Enter a string :");
              string str = Console.ReadLine();
              sw.Write(str);
              sw.Flush();
              sw.Close();
           
        
    
    class Program
    
        static void Main(string[] args)
        
            FileWrite fw = new FileWrite();
            fw.writeData();
            Console.ReadLine();
        
    

【讨论】:

这里不需要使用FileStream,因为你已经用using包装了它,fs.Close()是多余的。 StreamWriter 实现 IDisposable 并且应该真正包含在自己的 using 语句中。【参考方案5】:

将它包含在using 语句中,以便刷新流并释放对象:

using(StreamWriter stream = new StreamWriter(path))

    stream.WriteLine("Something one: "+cent.number1);
    stream.WriteLine("Something two: "+cent.number2);


正如user3076560 所指出的,您的字符串可能需要转义。您可以通过以下语句完成此操作:

savepath = @"c:\projects\central.txt";

savepath = "c:\\projects\\central.txt";

在主程序中。

【讨论】:

【参考方案6】:

在 main() 中,您将 stats 声明为 class Statystyki 的对象。但是,您正在使用statsy 访问您的save()。因此,我不确定您的代码是否已编译。 另外,添加using 语句。

【讨论】:

以上是关于C# 在使用 StreamWriter 时得到空的 .txt的主要内容,如果未能解决你的问题,请参考以下文章

C# streamwriter方法写入汉字时乱码

C#中StreamWriter类使用总结

使用 StreamWriter 不起作用 \n (C#)

C# 单元测试 StreamWriter 参数

C# 使用从 FileStream 创建的 StreamWriter 覆盖文件

c# streamWriter 的write方法是添加还是覆盖??