首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在C#中将数据写入CSV文件

在C#中将数据写入CSV文件
EN

Stack Overflow用户
提问于 2013-09-12 14:39:12
回答 11查看 778.9K关注 0票数 234

我正在尝试使用C#语言逐行写入csv文件。下面是我的函数

代码语言:javascript
复制
string first = reader[0].ToString();
string second=image.ToString();
string csv = string.Format("{0},{1}\n", first, second);
File.WriteAllText(filePath, csv);

整个函数在一个循环中运行,每一行都应该写入csv文件。在我的例子中,下一行覆盖了现有的行,最后,我在csv文件中只得到了一条记录,也就是最后一条记录。如何写入csv文件中的所有行?

EN

回答 11

Stack Overflow用户

发布于 2013-09-12 14:52:53

我强烈建议你走更单调乏味的路线。尤其是当你的文件很大的时候。

代码语言:javascript
复制
using(var w = new StreamWriter(path))
{
    for( /* your loop */)
    {
        var first = yourFnToGetFirst();
        var second = yourFnToGetSecond();
        var line = string.Format("{0},{1}", first, second);
        w.WriteLine(line);
        w.Flush();
    }
}

File.AppendAllText()打开一个新文件,写入内容,然后关闭该文件。与将数据写入开放流相比,打开文件是一项非常耗费资源的操作。在循环中打开\关闭文件会导致性能下降。

Johan建议的方法通过将所有输出存储在内存中,然后只写一次来解决这个问题。然而(在大文件的情况下)你的程序会消耗大量的内存,甚至会导致OutOfMemoryException崩溃

我的解决方案的另一个优点是,您可以通过保存输入数据中的当前位置来实现暂停\恢复。

upd。使用放在正确的位置

票数 101
EN

Stack Overflow用户

发布于 2016-02-23 18:57:38

手动编写csv文件可能很困难,因为您的数据可能包含逗号和换行符。我建议您使用现有的库。

这个问题提到了几个选项。

Are there any CSV readers/writer libraries in C#?

票数 38
EN

Stack Overflow用户

发布于 2014-04-04 06:39:22

我使用两个解析的解决方案,因为它很容易维护

代码语言:javascript
复制
// Prepare the values
var allLines = (from trade in proposedTrades
                select new object[] 
                { 
                    trade.TradeType.ToString(), 
                    trade.AccountReference, 
                    trade.SecurityCodeType.ToString(), 
                    trade.SecurityCode, 
                    trade.ClientReference, 
                    trade.TradeCurrency, 
                    trade.AmountDenomination.ToString(), 
                    trade.Amount, 
                    trade.Units, 
                    trade.Percentage, 
                    trade.SettlementCurrency, 
                    trade.FOP, 
                    trade.ClientSettlementAccount, 
                    string.Format("\"{0}\"", trade.Notes),                             
                }).ToList();

// Build the file content
var csv = new StringBuilder();
allLines.ForEach(line => 
{
    csv.AppendLine(string.Join(",", line));            
});

File.WriteAllText(filePath, csv.ToString());
票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18757097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档