Каков был бы самый быстрый способ связать три файла в C#?

20
задан Peter Mortensen 11 November 2010 в 16:36
поделиться

6 ответов

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);
25
ответ дан 29 November 2019 в 22:37
поделиться

Я не знаю C# так хорошо - можно ли назвать оболочку оттуда? Можно ли сделать что-то как

 system("type file1 file2 file3 > out"); 

?

я полагаю, что асимптотически, это должно быть очень быстро.

-2
ответ дан 20 October 2019 в 23:41
поделиться

Если Ваши файлы являются текстом и не большие, существует что-то, чтобы быть сказанным для очень простого, очевидного кода. Я использовал бы следующее.

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

, Если Ваши файлы являются файлами крупного текста и Вы находитесь на Платформе 4.0, можно использовать File.ReadLines, чтобы не буферизовать весь файл.

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

, Если Ваши файлы являются двоичными, См. ответ Mehrdad

7
ответ дан 29 November 2019 в 22:37
поделиться

Иначе.... как насчет того, чтобы позволить ОС сделать это для Вас?:

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();
6
ответ дан 29 November 2019 в 22:37
поделиться

Вы имеете в виду 3 текстовых файла?? Результатом должен быть файл снова?

Как насчет чего-то как:

string contents1 = File.ReadAllText(filename1);
string contents2 = File.ReadAllText(filename2);
string contents3 = File.ReadAllText(filename3);

File.WriteAllText(outputFileName, contents1 + contents2 + contents3);

, Конечно, с StringBuilder и немного дополнительный ум, Вы могли легко расширить это для обработки любого количества входных файлов :-)

Аплодисменты

3
ответ дан 29 November 2019 в 22:37
поделиться

Если Вы находитесь в среда Win32 , наиболее эффективное решение могло бы быть должно использовать API-функцию Win32 "WriteFile". Существует пример в VB 6, но перезапись его в C# не является трудной.

1
ответ дан 29 November 2019 в 22:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: