blogSite

我是谁?我在哪儿?我在干什么?

View project on GitHub

C#IO

大文件读取参考示例(示例作用,tab替换为逗号)

示例一(读入文件、输出文件、读取行)
    // 读取 大文件(大到约4个GB的文本文件)
    private bool ReadBigFile()
    {
        string sTmpFile = this.tbOut.Text;
        if (File.Exists(sTmpFile))
        {
            File.Delete(sTmpFile);
        }

        if (!System.IO.File.Exists(sTmpFile))
        {
            FileStream fs;
            fs = File.Create(sTmpFile);
            fs.Close();
        }

        if (!File.Exists(txtFileName.Text.Trim()))
        {
            lblResult.Text = "File not exist!";
            txtFileName.Focus();
            return false;
        }

        FileStream streamInput = System.IO.File.OpenRead(@txtFileName.Text.Trim());
        FileStream streamOutput = System.IO.File.OpenWrite(sTmpFile);

        int iRowCount = 10;
        int.TryParse(txtRowCount.Text.Trim(), out iRowCount);

        try
        {
            //for (int i = 1; i <= iRowCount;)
            //{
            //    int result = streamInput.ReadByte();
            //    if (result == 13)
            //    {
            //        i++;
            //    }
            //    if (result == -1)
            //    {
            //        break;
            //    }
            //    if (result == 9)
            //    {
            //        result = 44;
            //    }
            //    streamOutput.WriteByte((byte)result);
            //}

            while (true)
            {
                int result = streamInput.ReadByte();
                if (result == -1)
                {
                    break;
                }
                if (result == 9)
                {
                    result = 44;
                }
                streamOutput.WriteByte((byte)result);
            }

        }
        finally
        {
            streamInput.Dispose();
            streamOutput.Dispose();
        }

        return true;
    }
示例二(读入文件、输出文件)
    // 读取 大文件(大到约4个GB的文本文件)
    private bool ReadBigFile(string txtFileName, string sTmpFile)
    {
        if (File.Exists(sTmpFile))
        {
            File.Delete(sTmpFile);
        }

        if (!System.IO.File.Exists(sTmpFile))
        {
            FileStream fs;
            fs = File.Create(sTmpFile);
            fs.Close();
        }

        if (!File.Exists(txtFileName))
        {
            return false;
        }

        FileStream streamInput = System.IO.File.OpenRead(txtFileName);
        FileStream streamOutput = System.IO.File.OpenWrite(sTmpFile);

        try
        {
            while (true)
            {
                int result = streamInput.ReadByte();
                if (result == -1)
                {
                    break;
                }
                if (result == 9)
                {
                    result = 44;
                }
                streamOutput.WriteByte((byte)result);
            }

        }
        finally
        {
            streamInput.Dispose();
            streamOutput.Dispose();
        }

        return true;
    }
示例三(循环处理,替换内容,删除行)
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;

    namespace ConsoleApp1
    {
        class Program
        {
            // 2019-01-01 02:37:32.050
            static string dateFormatStr = "yyyy-MM-dd HH:mm:ss.fff";
            //// 减8H
            //static double addH = -8;

            static void Main(string[] args)
            {
                Program p = new Program();
                //args = new string[2];
                //args[0] = "E:\\tempin";
                //args[1] = "E:\\tempout";
                Console.WriteLine("start >> " + DateTime.Now.ToString(dateFormatStr));
                Console.WriteLine(args[0].ToString());
                Console.WriteLine(args[1].ToString());
                p.ReadFiles(args[0].ToString(), args[1].ToString());
                Console.WriteLine("end   >> " + DateTime.Now.ToString(dateFormatStr));
            }

            /// <summary>
            /// 读取文件夹下所有文件
            /// </summary>
            /// <param name="inFiles"></param>
            /// <param name="outFiles"></param>
            /// <returns></returns>
            private void ReadFiles(string inFiles, string outFiles)
            {
                DirectoryInfo inFolder = new DirectoryInfo(inFiles);
                if (inFolder == null)
                    return;

                FileSystemInfo[] files = inFolder.GetFileSystemInfos();
                for (int f = 0; f < files.Length; f++)
                {
                    FileInfo file = files[f] as FileInfo;
                    //ReadBigFile();
                    //是文件                
                    if (file != null)
                    {
                        bool a = this.ReadBigFile(file.FullName, outFiles + "\\" + file.Name);
                    }
                    else
                    {
                        string subOutFile = outFiles + "\\" + files[f].ToString();
                        if (!System.IO.Directory.Exists(subOutFile))
                        {
                            Directory.CreateDirectory(subOutFile + "\\");
                        }

                        ReadFiles(files[f].FullName.ToString(), subOutFile);
                    }
                }

            }

            // 读取 大文件
            private bool ReadBigFile(string txtFileName, string sTmpFile)
            {
                if (File.Exists(sTmpFile))
                {
                    File.Delete(sTmpFile);
                }

                if (!System.IO.File.Exists(sTmpFile))
                {
                    FileStream fs;
                    fs = File.Create(sTmpFile);
                    fs.Close();
                }

                if (!File.Exists(txtFileName))
                {
                    return false;
                }

                FileStream streamInput = System.IO.File.OpenRead(txtFileName);
                FileStream streamOutput = System.IO.File.OpenWrite(sTmpFile);

                try
                {
                    string lineStr = string.Empty;
                    while (true)
                    {
                        int result = streamInput.ReadByte();
                        if (result == 13)
                        {
                            string outTimeStr = "";
                            string[] strs = lineStr.Split(',');
                            bool isContinue = false;
                            for (int k = 0; k < strs.Length; k++)
                            {
                                //DateTime toDateTime;
                                //bool isDate = DateTime.TryParse(strs[k], out toDateTime);
                                //if (isDate && strs[k].Length > 10)
                                //{
                                //    toDateTime = toDateTime.AddHours(addH);
                                //    outTimeStr += toDateTime.ToString(dateFormatStr);
                                //}
                                //else
                                //{
                                //    outTimeStr += strs[k];
                                //}
                                if (strs[k] == "Brake_TypeA" || strs[k] == "Brake_TypeB" || strs[k] == "PMC")
                                {
                                    isContinue = true;
                                    break;
                                }

                                outTimeStr += strs[k] + ",";
                            }

                            if (isContinue)
                            {
                                lineStr = string.Empty;
                                continue;
                            }

                            outTimeStr = outTimeStr.Substring(0, outTimeStr.Length - 1);

                            byte[] outByte = System.Text.Encoding.ASCII.GetBytes(outTimeStr);
                            for (int m = 0; m < outByte.Length; m++)
                            {
                                streamOutput.WriteByte(outByte[m]);
                            }
                            streamOutput.WriteByte((byte)result);

                            lineStr = string.Empty;
                            continue;
                        }
                        if (result == -1)
                        {
                            break;
                        }
                        if (result == 9)
                        {
                            result = 44;
                        }
                        //streamOutput.WriteByte((byte)result);

                        lineStr += Convert.ToString((char)result);
                    }

                }
                finally
                {
                    streamInput.Dispose();
                    streamOutput.Dispose();
                }

                return true;
            }
        }
    }

参考文档

首页 > 学习总览 > 开发语言 > C#