将txt转为DataTable的方法

        public static byte[] GetFileData(string fileUrl)
        {
            FileStream fs = new FileStream(fileUrl, FileMode.Open, FileAccess.Read);
            try
            {
                byte[] buffur = new byte[fs.Length];
                fs.Read(buffur, 0, (int)fs.Length);

                return buffur;
            }
            catch
            {
                return null;
            }
            finally
            {
                if (fs != null)
                {
                    fs.Close();
                }
            }
        }
        public static DataTable CreateDataTableFromFile(string strFilePath)
        {
            byte[] importFile = GetFileData(strFilePath);
            DataTable dt = new DataTable();
            var cb = new DelimitedClassBuilder("temp", ",") { IgnoreFirstLines = 0, IgnoreEmptyLines = true, Delimiter = "," };
            var ms = new MemoryStream(importFile);
            var sr = new StreamReader(ms, Encoding.Default);
            var headerArray = sr.ReadLine().Split(',');
            foreach (var header in headerArray)
            {
                cb.AddField(header, typeof(string));
                cb.LastField.FieldQuoted = true;
                cb.LastField.QuoteChar = '"';
            }
            var classType = cb.CreateRecordClass();
            return ReadDataTableFromStream(classType, sr);
        }
        public static DataTable ReadDataTableFromStream(Type classType, StreamReader sr)
        {
            // Build an array of dynamic parameters
            var classTypes = new Type[] { classType };            // Construct our generic type
            var engineGenericType = typeof(FileHelperEngine<>);
            var engineType = engineGenericType.MakeGenericType(classTypes);
            var engine = Activator.CreateInstance(engineType);
            //return engine.ReadStream(sr)
            var engineReadStreamMethod = engineType.GetMethod("ReadStream", new Type[] { typeof(TextReader) });
            var engineReadStreamArgs = new object[] { sr };
            var engineReadStreamResult = engineReadStreamMethod.Invoke(engine, engineReadStreamArgs);
            //return engine.ToDataTable()
            var toDataTableType = typeof(FileHelpers.ExtensionsFileHelpers);
            var toDataTableMethod = toDataTableType.GetMethod("ToDataTable");
            var toDataTableGeneric = toDataTableMethod.MakeGenericMethod(new Type[] { classType });
            var toDataTableArgs = new object[] { engineReadStreamResult };
            var toDataTableResult = toDataTableGeneric.Invoke(null, toDataTableArgs);
            return (DataTable)toDataTableResult;
        }
        static void Main(string[] args)
        {
            string strPath = @"C:\soft\a.txt";
            DataTable dt = CreateDataTableFromFile(strPath);
            int intTotalCount = dt.Rows.Count;
        }

提示:需要引用FileHelpers控件,引用方法为:

 Install-Package FileHelpers



https://stackoverflow.com/questions/4585726/readstreamasdt-filehelpers-and-c-sharp-how-do-i-dynamically-read-in-a-csv-us

https://github.com/MarcosMeli/FileHelpers/issues/273

转载于:https://www.cnblogs.com/wjx-blog/p/8654811.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值