如何在不加载整个文件的情况下将标题行添加到CSV?

时间:2017-05-01 21:31:34

标签: c#

我有一个console application,我想在CSV文件中添加header row而不将数据加载到应用程序中。我需要使用什么代码来执行此操作,还要仅检查第一行以查看标头是否已存在,如果它们不存在则不添加标题行?我已经尝试了几种方法来做到这一点,但无法找到一种编码方式而不加载整个文件以检查它是否存在然后添加标题行。

2 个答案:

答案 0 :(得分:1)

您可以通过这种方式一次读取一行,只有在不存在的情况下才添加标题:

// Read in lines from file.
foreach (string line in File.ReadLines("c:\\file.txt"))
{
    Console.WriteLine("-- {0}", line);
}

https://www.dotnetperls.com/file-readlines

答案 1 :(得分:1)

您可以使用StreamReaderStreamWriter来最小化内存使用量。

我的建议是逐行读取csv文件,如果需要添加标题,请将其写入临时文件。在记忆方面,它是有效的。

private void AddHeader(string filename)
{
    string tempFilename = "temp.csv";
    bool toCopy = false;

    using (var sw = new StreamWriter(tempFilename, false))
    {
        //check if header exists
        using(var sr = new StreamReader(filename))
        {
            var line = sr.ReadLine(); // first line
            if(line != null && line != "Your Header") // check header exists
            {
                toCopy = true; // need copy temp file to your original csv

                // write your header into the temp file
                sw.WriteLine("Your Header");

                while(line != null)
                {
                    sw.WriteLine(line);
                    line = sr.ReadLine();
                }
            }
        }
    }

    if(toCopy)
        File.Copy(tempFilename, filename, true);
    File.Delete(tempFilename);
}