项目背景:
今天开发遇到一个需求,需要将若干文本文件合并到一个文本文件中,供程序调用。这个主要用在什么场景呢?激光点云数据通常是按区域以文本方式存储的,而我想将不同区域的激光点拿来一起建模。当然方法有两种,一是逐个文本读取,二是将他们合并成一个文本后在读取!当然本质都是文件了!因为程序之前激光点文件读取都是读一个文件,所以为了方便我还是选择合并方式了,这样就不用改源代码了。由于要操作的激光点数据一般数据量都很大,所以要选择FileStream方式了!针对FileStream与StreamReader的区别请看我的博文:
文本文件合并主方法:
public void CombineFile(string[] infileName, String outfileName)
{
int b;
int n = infileName.Length;
FileStream[] fileIn = new FileStream[n];
using (FileStream fileOut = new FileStream(outfileName, FileMode.Create))
{
for (int i = 0; i < n; i++)
{
try
{
fileIn[i] = new FileStream(infileName[i], FileMode.Open);
while ((b = fileIn[i].ReadByte()) != -1)
fileOut.WriteByte((byte)b);
}
catch (System.Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
fileIn[i].Close();
}
}
}
}
调用方法:
private void button1_Click(object sender, EventArgs e)
{
List<string> file = new List<string>();
file.Add( @"C:\Users\hp\Desktop\xyz合并\1.xyz");
file.Add(@"C:\Users\hp\Desktop\xyz合并\2.xyz");
file.Add(@"C:\Users\hp\Desktop\xyz合并\3.xyz");
CombineFile(file.ToArray(), @"C:\Users\hp\Desktop\xyz合并\" + "cc.xyz");
}
合并结果 :