Проблема со служебными символами при работе с файлами
Уже перепробавал кучу вариантов, а оно не хочет работать как надо.
Код:
fprintf(f, "%s\n", "hello!"); // в файле будет ровно 7 байт
И еще одна пррозьба! У кого C++Builder 6 - скиньте мне все 4 апдейта, а то я свои ставлю, а он всеравно глюкавит.
попробуй открывать файл с ключиком "b" - примерно так:
Код:
FILE * hFile;
hFile = _wfopen(pszName,TEXT("wb"));
hFile = _wfopen(pszName,TEXT("wb"));
даже если fwrite пользовать... если все размеры/длины правильно указаны, то никаких "лишних" симоволов не будет.
PS: а код стоило бы всё-таки показать.
Приведу тебе цитату с мсдн:
Цитата:
t
Open in text (translated) mode. In this mode, CTRL+Z is interpreted as an end-of-file character on input. In files opened for reading/writing with "a+", fopen checks for a CTRL+Z at the end of the file and removes it, if possible. This is done because using fseek and ftell to move within a file that ends with a CTRL+Z, may cause fseek to behave improperly near the end of the file.
Also, in text mode, carriage return–linefeed combinations are translated into single linefeeds on input, and linefeed characters are translated to carriage return–linefeed combinations on output. When a Unicode stream-I/O function operates in text mode (the default), the source or destination stream is assumed to be a sequence of multibyte characters. Therefore, the Unicode stream-input functions convert multibyte characters to wide characters (as if by a call to the mbtowc function). For the same reason, the Unicode stream-output functions convert wide characters to multibyte characters (as if by a call to the wctomb function).
b
Open in binary (untranslated) mode; translations involving carriage-return and linefeed characters are suppressed.
If t or b is not given in mode, the default translation mode is defined by the global variable _fmode. If t or b is prefixed to the argument, the function fails and returns NULL.
For more information about using text and binary modes in Unicode and multibyte stream-I/O, see Text and Binary Mode File I/O and Unicode Stream I/O in Text and Binary Modes.
Из нее ясно видно, что в режиме - отличном от бинарного - символы управления курсором - читаются пишутся некорректно. Решение тут - только одно - писать с ключиком "b"!!
Цитата: Тень Пса
да ничего не должно добавляться, хоть в бинарном хоть в текстовом режиме!.. ну никак!
даже если fwrite пользовать... если все размеры/длины правильно указаны, то никаких "лишних" симоволов не будет.
PS: а код стоило бы всё-таки показать.
даже если fwrite пользовать... если все размеры/длины правильно указаны, то никаких "лишних" симоволов не будет.
PS: а код стоило бы всё-таки показать.
Черный бобр прав :)
В текстовом режиме используется символ окончания строки характерный для данной ОС. Я думаю все в курсе что Win, *nix и Mac по разному данные символы распознают?
глянул в код ) у меня всё пишется в бинарном режиме :D
простите товарищи :)
Как иногда бывает все бонально и просто:)
Знаю-знаю, в свое время сам с этим долго долбался. было прикольно когда шла шифровка данных размером кратным 16 байт. по 16 байт а в результате получалось совсем не кратное 16 число байт :D А потом я перечитал справку и все стало на свои места :D :D