迭代文件并读取记录

时间:2010-03-01 10:26:28

标签: c# file fixed-length-record

C#3.5中以下最快的方法是什么:

  1. 遍历目录中的文件
  2. 读取文件的记录(固定长度为247个字符)
  3. 将每个记录的固定长度字符串转换为Struct或Class。
  4. 由于

2 个答案:

答案 0 :(得分:0)

这写起来相对较快:

var myStructs = 
from file in Directory.GetFiles(".", "*.*", SearchOption.TopDirectoryOnly)
select ConvertFileToStructs(File.ReadAllText(file));

如果这是最快的方式,那么性能方面呢?可能不是,但它不会产生巨大的差异。影响性能的是在ConvertFileToStructs()函数中实现反序列化。但要回答这个问题,我们需要知道文件的具体格式。


请阅读您的评论。我建议进行以下解析:

List<MyStruct> ConvertFileToStructs(string content, int[] mapping)
{
    var records = new List<MyStruct>();
    int length = content.Length();
    for(int i = 0; i < length; i += 247)
         records.Add(ConvertRecordToStruct(content.Substring(i,247), mapping));
    return records;
}

MyStruct ConvertRecordToStruct(string record, int[] mapping)
{
    MyStruct s;
    s.Field1 =  record.Substring(mapping[0], mapping[1]);
    //set other fields
    return s;
}

这段代码可能会针对性能进行优化,但我认为它不会显着改变,尤其是因为涉及I / O到磁盘而且Substring()非常快(参见http://dotnetperls.com/substring)。当然,你必须在你的机器上进行测试。

答案 1 :(得分:0)

自定义类来处理文件

   class customFile
        {
            string fileText;
            public string FileText
            {
                get { return fileText; }
                set { fileText = value; }
            }
        }

阅读所有文字

        string[] filePaths = Directory.GetFiles(dirPath);
        List<customFile> customFiles = new List<customFile>();
        foreach (string file in filePaths)
        {
            customFiles.Add(new customFile { FileText = File.ReadAllText(file) });
        }