当前位置:  开发笔记 > 编程语言 > 正文

在C#中连接三个文件的最快方法是什么?

如何解决《在C#中连接三个文件的最快方法是什么?》经验,为你挑选了4个好方法。

我需要使用C#连接3个文件.头文件,内容和页脚文件,但我想这样做很酷.

酷=非常小的代码或非常快(非汇编代码).



1> user664769..:

我支持Mehrdad Afshari,他的代码与System.IO.Stream.CopyTo中的代码完全相同.我仍然想知道他为什么不使用相同的功能而不是重写它的实现.

        string[] srcFileNames = { "file1.txt", "file2.txt", "file3.txt" };
        string destFileName = "destFile.txt";

        using (Stream destStream = File.OpenWrite(destFileName))
        {
            foreach (string srcFileName in srcFileNames)
            {
                using (Stream srcStream = File.OpenRead(srcFileName))
                {
                    srcStream.CopyTo(destStream);
                }
            }
        }

根据反汇编程序(ILSpy),默认缓冲区大小为4096.CopyTo函数有一个重载,它允许您指定缓冲区大小,以防您对4096字节不满意.



2> Mehrdad Afsh..:
void CopyStream(Stream destination, Stream source) {
   int count;
   byte[] buffer = new byte[BUFFER_SIZE];
   while( (count = source.Read(buffer, 0, buffer.Length)) > 0)
       destination.Write(buffer, 0, count);
}


CopyStream(outputFileStream, fileStream1);
CopyStream(outputFileStream, fileStream2);
CopyStream(outputFileStream, fileStream3);


我觉得这不太聪明.什么是好BUFFER_SIZE?没人知道.与File.ReadAllText(a)+ File.ReadAllText(b)+ File.ReadAllText(c)相比,这看起来像是对我的过早优化.

3> Jimmy..:

如果你的文件是文本而不是很大,那么就可以说一些简单明了的代码.我会使用以下内容.

File.ReadAllText("file1") + File.ReadAllText("file2") + File.ReadAllText("file3");

如果您的文件是大文本文件并且您在Framework 4.0上,则可以使用File.ReadLines以避免缓冲整个文件.

File.WriteAllLines("out", new[] { "file1", "file2", "file3" }.SelectMany(File.ReadLines));

如果您的文件是二进制文件,请参阅Mehrdad的答案


这看起来需要大量内存来将所有三个文件作为字符串保存在内存中,更不用说通过添加前两个而产生的中间字符串对象以及通过添加最后一个来创建的最终字符串.
@TcKs:1)这里的内联连接是在一个操作中由string.concat(a,b,c)完成的,开销比stringbuilder低2​​)我假设"header/content/footer"文件是文本.

4> Kev..:

另一种方式......让操作系统为你做这件事怎么样?:

ProcessStartInfo psi = new ProcessStartInfo("cmd.exe", 
        String.Format(@" /c copy {0} + {1} + {2} {3}", 
            file1, file2, file3, dest));
psi.UseShellExecute = false;
Process process = Process.Start(psi);
process.WaitForExit();


除非你是在裸机上运行,​​否则你让操作系统无论如何都会这样做.但是,除非迫切需要,否则应该做一些不应该做的事情.
推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有