您好我正在尝试将数据写入.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();
}
}
}
}
}
答案 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
,在将字符串写入文件时,它会让您的生活更轻松。
度过美好的一天!