写/编辑CSV文件(不重写整个文件!)

时间:2011-03-31 21:38:09

标签: c# csv

我正处于从直接在CSV文件上运行的客户端替换某些功能的情况,该文件用作系统的配置文件。

搜索中可用的大多数案例都是关于从CSV读取其他格式。

Other将整个CSV放入内存,附加专用行和更改,然后将它们写回新文件(或覆盖现有文件)。

我想更聪明地完成这项任务,并寻求建议和代码创意。
我们可以假设每次只有一个用户,应该可以访问该文件 该文件使用File.ReadLines().NET 4读取。

我的示例项目的一部分,

   var lines = from l in File.ReadLines("/Linq2Csv/data.csv")
               where l.Split(',')[0].StartsWith("Jonas") //Just test 'n pick 1 line
               select new
               {
                 Name = l.Split(',')[0],
                 ...

3 个答案:

答案 0 :(得分:1)

CSV文件只是一个顺序文本文件。

如果您想修改拥有的内容以将整个文件读入内存,请在那里进行修改并再次将其写出来。

假设文件的更一般情况包含以下内容:

  

ABCDEFGHIJKLMNOPQRSTUV

如果你想从中间删除“IJLKM”,你必须阅读文件的剩余部分(NOP ...),这样你就可以将它改组以满足(... FGH)。

如果要在“M”和“N”之间插入“0123456789”,则需要读取N-Z,否则新字符将覆盖“NOPQRSTUVW”。

答案 1 :(得分:1)

.NET Framework v4.0附带了一个用于内存映射文件支持的新类,请参阅

  1. msdn
  2. article
  3. 你很有可能为你做这项工作。当线条发生变化时,你仍然会遇到要解决的问题。但是,如果您想要随机访问和虚假更新(例如,将“MSFT”替换为“UNIX”),您将获得无与伦比的无与伦比的性能。

    您可以采用填充策略在每个单元格/行中拥有“空余空间”,以克服更改字段/行长度的问题。

    一般来说,我认为CSV文件的成本并不值得,但这项技术时不时出现,值得一提。

    干杯, 塞特

答案 2 :(得分:0)

在.NET中实现此目的的唯一方法是将其从csv文件移动到真正的数据库中。

您可以像打开数据库中的表一样打开文本文件。请参阅ConnectionString示例以在此处连接到它:http://www.connectionstrings.com/textfile

但是,即使使用.NET将其视为数据库,也不会阻止底层代码在更新时覆盖整个文件。

文本文件不适合并发用户。这就是真正的数据库存在的原因。