В файле write.c (c:\Program Files\Microsoft Visual Studio 8\VC\crt\src\) есть строки 286-294 Код (Text): while ( q - lfbuf < sizeof(lfbuf) - 1 && (unsigned)(p - (char *)buf) < cnt ) { ch = *p++; if ( ch == LF ) { ++lfcount; *q++ = CR; } *q++ = ch; } так вот если пытаться записать такую последовательность байт где будет 0D то в месте ch == LF будет равенство и в буфер для записи запишется лишнее CR!!! как это исправить, потому что надо писать все байты без всяких добавлений! Примечание: используя только _write! Правка write.c черевата ибо он используется вообще везде!
Cneg Это происходит, если открывать файл для работы с текстом, т.е., например fopen (FileName, "wt");. Если t убрать ничего дописываться не будет. [+] IMHO не в том разделе тема.
По умолчанию файл открывается в текстовом режиме, при котором комбинация символов "возврат каретки" и "перевод строки" при вводе преобразуются в одиночный символ перевода строки, а при выводе выполняется обратное преобразование. В двоичном режиме такие преобразования не выполняются.
Да, кстати. Поэтому для работы с файлом как с бинарником нужно или дописывать "b" или вызывать _set_fmode (_O_BINARY); перед fopen.