StreamReader и StreamWriter (производные от TextReader и TextWriter) не подходят для ситуаций, требующих точной формы двоичных данных.Они являются абстракциями высокого уровня файла, который состоит из байтов, а не текста или строк.Фактически, вы можете не только получить разное количество новых строк, но в зависимости от среды вы можете записать терминатор строки, отличный от ожидаемого CR / LF.другой.На самом деле это довольно просто.
var bytes = File.ReadAllBytes(pathIn);
var stream = File.Open(pathOut, FileMode.Append);
stream.Write(bytes, 0, bytes.Length);
stream.Close();
Если размер файла потенциально большой, вы должны одновременно открыть и входной, и выходной файл и использовать буфер фиксированного размера для копирования блока ввремя.
using (var streamIn = File.Open(pathIn, FileMode.Read))
using (var streamOut = File.Open(pathOut, FileMode.Append)) {
var bytes = new byte[BLOCK_SIZE];
int count;
while ((count=streamIn.Read(bytes, 0, bytes.Length)) > 0) {
streamOut.Write(bytes, 0, count);
}
}
Также стоит отметить, что вышеприведенный код можно заменить на Stream.CopyTo , который является новым в .NET 4.