【问题标题】:How to read the content of multiple csv files in a list in c#如何在c#中读取列表中多个csv文件的内容
【发布时间】:2019-07-23 11:21:25
【问题描述】:

我想在一个列表中读取多个 csv 文件的内容,并使用这个列表来拆分 datagridview 中的内容。问题是使用这段代码我只得到文件名而不是文件的内容。如何阅读内容?

你可以在下面看到代码。

public List<string> GetFileList(string strFilePath, bool SubFolders)
{
    List<string> FileArray = new List<string>();

    var fileContent = string.Empty;
    var filePath = string.Empty;

    using (OpenFileDialog openFileDialog = new OpenFileDialog())
    {
        openFileDialog.InitialDirectory = "C:\\Users\\blabla\\Desktop\\folder\\files";
        openFileDialog.Filter = "csv files (*.csv)|*.csv|All files (*.*)|*.*";
        openFileDialog.FilterIndex = 2;
        openFileDialog.RestoreDirectory = true;
        openFileDialog.Multiselect = true;

        if (openFileDialog.ShowDialog() == DialogResult.OK)
        {
            try
            {
                string[] Files = System.IO.Directory.GetFiles(strFilePath);
                string[] Folders = System.IO.Directory.GetDirectories(strFilePath);

                for (int i = 0; i < Files.Length; i++)
                {
                    FileArray.Add(Files[i].ToString());
                }

                if (SubFolders == true)
                {
                    for (int i = 0; i < Files.Length; i++)
                    {
                        FileArray.AddRange(GetFileList(Folders[i], SubFolders));
                    }
                }
            }
            catch (Exception Ex)
            {
                throw (Ex);
            }
            return FileArray;
        }
        return FileArray;
    }
}

我希望将 FileArray 中的内容用于 datagridview,但我只得到文件名。 非常感谢您的帮助!

【问题讨论】:

标签: c# csv readline


【解决方案1】:

您只获得文件名,因为您只读取文件名:)

你需要使用

string[] lines = System.IO.File.ReadAllLines(Files[i].ToString());
FileArray.AddRange(lines)

在你的程序中。

MSDN 声明:

System.IO.Directory.GetFiles

返回满足的文件名

指定标准。

所以你需要打开每个文件,从中读取所有内容并将其添加到返回变量中。

【讨论】:

    【解决方案2】:

    你能导入命名空间 Microsoft.VisualBasic.FileIO 吗?如果是,那么您可能会查看 TextFieldParser 类(请参阅microsoft documentation and example)。这是一个非常舒适的类,用于导入 CSV 文件并逐行读取它们。然后,您可以在一个循环中使用相应的数据填充您的目标集合。

    【讨论】:

    • 如果您是逐行读取 CSV 文件,那么您做错了。 CSV 文件是一种流式传输协议,应使用状态机读取。阅读Common Format and MIME Type for Comma-Separated Values (CSV) Files
    • 在您的链接文本中究竟在哪里说 CSV 是一种流协议?如果不是逐行读取,状态机将如何在一天结束时读取 CSV 文件?
    • 仔细查看“2. CSV 格式的定义”中的示例 6。换行符可以出现在字段的中间。如果您正在逐行读取 CSV 文件,则会中断包含换行符的字段。兼容的 CSV 阅读器将一次处理一个字符的文件。
    • 啊,好吧,然后我们聊了一会儿 :-) 根据 RFC,你当然是对的。我的意思是您可以逐行循环通过 TextFieldParser 的输出,因为它可以与字段内的换行符相处(如果它们正确地用双引号括起来)。这就是我所说的舒适课的意思。但同样,你的提示是绝对正确的,在最低级别文件应该以字符方式读取(所以我的第二个问题最终是错误的)。
    猜你喜欢
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    • 1970-01-01
    • 2016-11-02
    • 2020-01-13
    • 2018-01-27
    • 2014-11-28
    • 1970-01-01
    相关资源
    最近更新 更多