在好例子网,分享、交流、成长!
您当前所在位置:首页C# 开发实例C#语言基础 → c# 按行读文件(支持txt/csv等)类源码下载

c# 按行读文件(支持txt/csv等)类源码下载

C#语言基础

下载此实例
  • 开发语言:C#
  • 实例大小:0.01M
  • 下载次数:146
  • 浏览次数:865
  • 发布时间:2014-03-05
  • 实例类别:C#语言基础
  • 发 布 人:zgxjunior
  • 文件格式:.cs
  • 所需积分:2
 相关标签: C# 文件 csv

实例介绍

按行读文件


核心代码:

using System;
using System.IO;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace Junior.Utils
{
    class FileReader : IDisposable
    {
        private string fileExt = null;
        private FileStream fs = null;
        private StreamReader sr = null;
        private string path = string.Empty;
        private Encoding encode = Encoding.Default;
        private FileInfo fileInfo = null;
        private bool eof;
        

        #region FileSize
        /// <summary>
        /// 文件大小
        /// </summary>
        public long FileSize
        {
            get
            {
                if (fileInfo != null)
                    return fileInfo.Length;
                fileInfo = new FileInfo(path);
                return fileInfo.Length;
            }

        } 
        #endregion


        #region FileClusterSize
        //// <summary>
        /// 结构。硬盘信息
        /// </summary>
        private struct DiskInfo
        {
            //public string RootPathName;
            //每簇的扇区数
            public int SectorsPerCluster;
            //每扇区字节
            public int BytesPerSector;
            //public int NumberOfFreeClusters;
            //public int TotalNumberOfClusters;
        }

        //调用windows API获取磁盘空闲空间
        //导入库
        [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
        static extern bool GetDiskFreeSpace([MarshalAs(UnmanagedType.LPTStr)]string rootPathName,
        ref int sectorsPerCluster, ref int bytesPerSector, ref int numberOfFreeClusters, ref int totalNumbeOfClusters);

        private DiskInfo GetDiskInfo(string rootPathName)
        {

            DiskInfo diskInfo = new DiskInfo();
            int sectorsPerCluster = 0, bytesPerSector = 0, numberOfFreeClusters = 0, totalNumberOfClusters = 0;
            GetDiskFreeSpace(rootPathName, ref sectorsPerCluster, ref bytesPerSector, ref numberOfFreeClusters, ref totalNumberOfClusters);
            //每簇的扇区数
            diskInfo.SectorsPerCluster = sectorsPerCluster;
            //每扇区字节
            diskInfo.BytesPerSector = bytesPerSector;
            return diskInfo;
        }

        /// <summary>
        /// 文件每簇的字节
        /// </summary>
        public long FileClusterSize
        {
            get
            {
                long clusterSize = 0;
                DiskInfo diskInfo = new DiskInfo();
                diskInfo = GetDiskInfo(fileInfo.Directory.Root.FullName);
                clusterSize = (diskInfo.BytesPerSector * diskInfo.SectorsPerCluster);
                return clusterSize;
            }
        } 
        #endregion

        public long FileSizeOnDisk
        {
            get 
            {
                long temp = 0;
                long clusterSize = FileClusterSize;
                if (fileInfo.Length % clusterSize != 0)
                {
                    decimal res = fileInfo.Length / clusterSize;
                    int clu = Convert.ToInt32(Math.Ceiling(res))   1;
                    temp = clusterSize * clu;
                }
                else
                {
                    return fileInfo.Length;
                }
                return temp;
            }
        }

        public bool EOF
        {
            
            get
            {
                try { return sr.EndOfStream; }
                catch { eof = true; return eof; }
            }
        }
        /// <summary>
        /// 获取总行数 - 会重新创建文件流
        /// </summary>
        public int TotalLines
        {
            get
            {
                using (FileStream tempfs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
                {
                    int count = 0;

                    using (StreamReader tempsr = new StreamReader(tempfs, encode))
                    {

                        while (!tempsr.EndOfStream)
                        {
                            count  ;
                            tempsr.ReadLine();
                        }
                    }

                    return count;
                }
            }
        }
        /// <summary>
        /// 创建一个读文件对象
        /// </summary>
        /// <param name="path"></param>
        public FileReader(string path)
        {
            try
            {
                this.path = path;
                fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                sr = new StreamReader(fs, Encoding.Default);
                fileExt = Path.GetExtension(path);
                fileInfo = new FileInfo(path);
            }
            catch
            {
                throw new FileNotFoundException("文件未找到");
            }
        }
        public FileReader(string path, Encoding encoding)
        {
            try
            {
                this.path = path;
                encode = encoding;
                fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                sr = new StreamReader(fs, encoding);
                fileExt = Path.GetExtension(path);
                fileInfo = new FileInfo(path);
            }
            catch
            {
                throw new FileNotFoundException("文件未找到");
            }
        }

        public List<string> AutoReadToList(bool filterDuplicate)
        {
            switch (fileExt)
            {
                case ".txt": return this.ReadTxtToList(filterDuplicate);
                case ".csv": return this.ReadCsvToList(0, filterDuplicate);
                default: throw new Exception("不能读取"   fileExt   "扩展名的文件");
            }
        }
        /// <summary>
        /// 读取Txt中的行到list中
        /// </summary>
        /// <param name="filterSame">是否过滤重复</param>
        /// <returns>Line List</returns>
        public List<string> ReadTxtToList(bool filterDuplicate)
        {
            List<string> lineList = null;
            string line = "";

            //判断读文件流是否为空
            if (sr != null)
            {
                //是否过滤重复
                if (filterDuplicate)
                {
                    lineList = new List<string>();
                    while (!sr.EndOfStream)
                    {
                        line = sr.ReadLine();
                        if (line.Trim().Length > 0)
                            if (!lineList.Contains(line))
                            {
                                lineList.Add(line);
                            }
                    }
                }
                else
                {
                    lineList = new List<string>();
                    while (!sr.EndOfStream)
                    {
                        line = sr.ReadLine();
                        if (line.Trim().Length > 0)
                            lineList.Add(line);
                    }
                }
            }
            line = null;
            return lineList;
        }
        /// <summary>
        /// 读取Csv文件暂时不支持带","的列
        /// </summary>
        /// <param name="nReadColumn">读取第几行</param>
        /// <param name="filterDuplicate">是否过滤重复</param>
        /// <returns>返回List</returns>
        public List<string> ReadCsvToList(int nReadColumn, bool filterDuplicate)
        {
            List<string> filedList = null;
            string[] splitTest = null;
            //判断读文件流是否为空
            if (sr != null)
            {
                //是否过滤重复
                if (filterDuplicate)
                {
                    filedList = new List<string>();
                    while (!sr.EndOfStream)
                    {
                        splitTest = sr.ReadLine().Split(',');
                        if (splitTest[nReadColumn].Trim().Length > 0)
                            if (!filedList.Contains(splitTest[nReadColumn]))
                                filedList.Add(splitTest[nReadColumn]);
                    }
                }
                else
                {
                    filedList = new List<string>();
                    while (!sr.EndOfStream)
                    {
                        splitTest = sr.ReadLine().Split(',');
                        if (splitTest[nReadColumn].Trim().Length > 0)
                            filedList.Add(splitTest[nReadColumn]);
                    }
                }
            }
            splitTest = null;
            return filedList;
        }

        /// <summary>
        /// 读Txt文件中的链接到Dictionary中按照域名分组
        /// </summary>
        /// <param name="filterDuplicate">是否过滤重复</param>
        /// <returns>Dictionary按照域名分组后的对象</returns>
        public Dictionary<string, List<string>> ReadTXTFileToDictionaryWithDomain(bool filterDuplicate)
        {
            Dictionary<string, List<string>> dictionary = new Dictionary<string, List<string>>();
            Uri uri = null;
            string line = "";
            //判断读文件流是否为空
            if (sr != null)
            {
                //是否过滤重复
                if (filterDuplicate)
                {
                    while (!sr.EndOfStream)
                    {
                        line = sr.ReadLine();
                        if (line.Trim().Length > 0)
                        {
                            try
                            {
                                uri = new Uri(line);

                                if (dictionary.ContainsKey(uri.Host))
                                {
                                    if (!dictionary[uri.Host].Contains(line))
                                    {
                                        dictionary[uri.Host].Add(line);
                                    }
                                }
                                else
                                {
                                    dictionary.Add(uri.Host, new List<string>());
                                    dictionary[uri.Host].Add(line);
                                }
                            }
                            catch
                            {
                                //string msg = "出错啦";
                            }
                        }
                    }
                }
                else
                {
                    while (!sr.EndOfStream)
                    {
                        line = sr.ReadLine();
                        if (line.Trim().Length > 0)
                        {
                            try
                            {
                                uri = new Uri(line);
                                if (dictionary.ContainsKey(uri.Host))
                                {
                                    dictionary[uri.Host].Add(line);
                                }
                                else
                                {
                                    dictionary.Add(uri.Host, new List<string>());
                                    dictionary[uri.Host].Add(line);
                                }
                            }
                            catch
                            {
                                //string msg = "出错啦";
                            }
                        }
                    }
                }
            }
            line = null;
            return dictionary;
        }
        public string ReadTXTLine()
        {
            if (!sr.EndOfStream)
            {
                return sr.ReadLine();
            }
            return null;
        }
        public string ReadToEnd()
        {
            if (!sr.EndOfStream)
            {
                return sr.ReadToEnd();
            }
            return null;
        }
        /// <summary>
        /// 关闭流
        /// </summary>
        public void Close()
        {
            if (this.sr != null) sr.Close();
            if (this.fs != null) fs.Close();
        }
        /// <summary>
        /// 释放此对象引用的所有资源
        /// </summary>
        public void Dispose()
        {
            if (this.sr != null) sr.Close();
            if (this.fs != null) fs.Close();
            if (this.sr != null) sr.Dispose();
            if (this.fs != null) fs.Dispose();
        }
    }
}

标签: C# 文件 csv

实例下载地址

c# 按行读文件(支持txt/csv等)类源码下载

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警