C#FileStream创建新的.csv文件但不写入它

时间:2017-08-20 23:40:19

标签: c# csv filestream

您好我正在尝试将数据写入.csv文件。我的代码是创建新文件但不写入它。这是代码的较短版本,其名称,年龄和性别变量已经预先确定。在我的实际应用程序中,这些变量来自文本框(我确保文本框中的数据实际上是使用MessageBox填充这些变量)。

以下是代码:

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

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            string filePath = "C:\\Users\\Jamie\\Desktop\\test.csv";
            string name = "jamie";
            int age = 69;
            string sex = "male";

            if (!(File.Exists(filePath)))
            {
                FileStream fs = new FileStream(filePath, FileMode.CreateNew, FileAccess.Write);
                if (fs.CanWrite)
                {
                    string columnTitles = "name,age,sex\n";
                    fs.Write(Encoding.ASCII.GetBytes(columnTitles), 0, 0);
                    string input = name + "," + age + "," + sex + "\n";
                    fs.Write(Encoding.ASCII.GetBytes(input), 0, 0);
                    fs.Flush();
                    fs.Close();
                }
            }
            else
            {
                FileStream fs = new FileStream(filePath, FileMode.Append, FileAccess.Write);
                if (fs.CanWrite)
                {
                    if (new FileInfo(filePath).Length == 0)
                    {
                        string columnTitles = "name,age,sex\n";
                        fs.Write(Encoding.ASCII.GetBytes(columnTitles), 0, 0);
                    }
                    string input = name + "," + age + "," + sex + "\n";
                    fs.Write(Encoding.ASCII.GetBytes(input), 0, 0);
                    fs.Flush();
                    fs.Close();
                }
            }
        }
    }
}

2 个答案:

答案 0 :(得分:1)

使用以下代码编写:

   fs.Write(Encoding.ASCII.GetBytes(input), 0, ASCIIEncoding.ASCII.GetByteCount(input));

F ileStream Write方法的第三个参数需要知道要写入的最大字节数。您指定0字节作为在您的情况下写入的最大字节,因此它不写入文件。

除了你的错误之外,我建议使用using statement,因为FileStream实现了IDisposable接口,只要它超出using语句的范围,它就会处理刷新流。

using(FileStream fs = new FileStream(filePath, FileMode.CreateNew, FileAccess.Write))
{
    if (fs.CanWrite)
        {
            string columnTitles = "name,age,sex\n";
            fs.Write(Encoding.ASCII.GetBytes(columnTitles), 0, 0);
            string input = name + "," + age + "," + sex + "\n";
            fs.Write(Encoding.ASCII.GetBytes(input), 0, ASCIIEncoding.ASCII.GetByteCount(input));
        }
}

答案 1 :(得分:0)

问题:

我首先测试了你的代码,经过一段时间的努力,我发现你犯了错误。具体来说,你只能通过告诉它来告诉fs.Write()要写入的字节数。因此它什么也没输入。

解决方案:

要解决这个问题,第三个参数是一个整数,在方法中称为count,应设置为byte[]的长度。

其他选项:

您可能需要查看System.IO.StreamWriter,在将字符串写入文件时,它会让您的生活更轻松。

度过美好的一天!