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#