我正在尝试使用C#语言逐行写入csv
文件。下面是我的函数
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
文件中的所有行?
发布于 2013-09-12 14:52:53
我强烈建议你走更单调乏味的路线。尤其是当你的文件很大的时候。
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。使用放在正确的位置
发布于 2016-02-23 18:57:38
手动编写csv文件可能很困难,因为您的数据可能包含逗号和换行符。我建议您使用现有的库。
这个问题提到了几个选项。
发布于 2014-04-04 06:39:22
我使用两个解析的解决方案,因为它很容易维护
// 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());
https://stackoverflow.com/questions/18757097
复制相似问题