下面的代码写入数据,运行良好,但我想在.csv文件中添加多个客户端(可能是10个)。我如何实现这一点。提前感谢。
private void createFileButton_Click(object sender, EventArgs e)
{
string newFileName = "C:\\client_20100913.csv";
string clientDetails = clientNameTextBox.Text + "," + mIDTextBox.Text + "," + billToTextBox.Text;
//Header of the .csv File
string clientHeader = "Client Name(ie. Billto_desc)" + "," + "Mid_id,billing number(ie billto_id)" + "," + "business unit id" + Environment.NewLine;
File.WriteAllText(newFileName, clientHeader);
File.AppendAllText(newFileName, clientDetails);
MessageBox.Show("Client Added", "Added", MessageBoxButtons.OK);
}
9条答案
按热度按时间tp5buhyn1#
如果要将客户端信息附加到现有文件,请执行以下操作:
这样,头行只在第一次创建文件时写入。
尽管提供一个列表详细视图可能会更好,它允许您查看所有客户机、添加和删除客户机、选择一个客户机以编辑详细信息,以及保存所有客户机的完整文件。
00jrzges2#
在我看来,您希望每次单击按钮时都添加一个新客户端。
如果是这样的话,那么它当前不起作用的原因是文件正在被行清除
最简单的更改是在覆盖文件之前检查文件是否存在:
当然你也可以使用其他策略,比如在应用程序启动时创建文件并保持打开状态(使用类似
StreamWriter
的命令),然后在应用程序退出时关闭编写器,这样就可以很好地保证在应用程序打开时文件不会被篡改。您可能希望这样做,因为该代码中存在争用条件-在您检查文件是否存在之后,在您写入文件之前,用户可能会删除它。保持文件打开有助于避免这种情况,但您可能希望也可能不希望这样做。
gwbalxhn3#
这里潜在的问题似乎是你从哪里获取数据来附加到你的CSV文件中。你的示例代码看起来像是从页面上的文本框中获取不同的数据片段,所以如果你想要多个客户端,他们都要在屏幕上的文本框中显示他们的数据吗?我的直觉可能不是。
在我看来,您应该使用某种类来处理这些客户端数据(可能持久化在数据库中),然后在该类中实现一个类似void AppendToCSV(字符串文件名)的方法,该方法将 that 客户端数据附加到CSV文件中,然后您可以循环遍历客户端对象,依次附加每个对象。
您如何生成/存储客户端对象(相对于屏幕上的文本框)取决于您的应用试图实现的目标。
guykilcj4#
我知道这个问题已经得到了回答,但是我还是创建了一个订阅者的日志。这个日志使用反射来获取对象的属性和值。希望这对将来的一些人有所帮助。
rkue9o1l5#
以下是我所做的,它对我非常有效:首先你需要从你的列表视图中创建数据表,或者只是从文本框中放入数据:
创建dataTable后,您可以通过以下方法生成CSV文件:在streamwriter构造函数中,您必须在第二个参数True中指定,通过此,您可以将数据附加到现有的.csv文件:
jtw3ybtb6#
快乐编码.....
c#csv
snz8szmq7#
使用CsvHelper;
公共void写入数据到Csv(MsgEnvironmentData[]数据,字符串csv路径){
}
mhd8tkvw8#
Jeramy的答案写在最后一个单元格的内容,并从他们的水平行在csv文件中。我混合和匹配他的解决方案与答案给出here。我知道这个问题被问了很久以前,但对于那些谁做研究,我张贴在这里的答案。
lyr7nygr9#
我使用这段简单的代码将数据附加到现有的CSV文件中: