Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблема со служебными символами при работе с файлами

16K
13 марта 2008 года
iRain
72 / / 12.03.2008
При работе с файлами имеется маленькая проблема! Когда я записаваю в файл символ с кодом 0A, то автоматически перед ним ставится 0D, получается код следующей строки (0D 0A), а он мне не нужен, мне нужно только 0A.
Уже перепробавал кучу вариантов, а оно не хочет работать как надо.
92
13 марта 2008 года
Тень Пса
2.2K / / 19.10.2006
как записываешь??? не может ничего происходить автоматом....

 
Код:
fprintf(f, "%s\n", "hello!"); // в файле будет ровно 7 байт
16K
13 марта 2008 года
iRain
72 / / 12.03.2008
fprintf(f, "%d\n", 10); кстати, такой вариант не припомню, что бы пробавал. Надо попробавать!

И еще одна пррозьба! У кого C++Builder 6 - скиньте мне все 4 апдейта, а то я свои ставлю, а он всеравно глюкавит.
255
13 марта 2008 года
Dart Bobr
1.4K / / 09.04.2004
Проблема не с тем - как ты пишешь - а с режимом открытия файла. Тебе нужно открывать файл на запись в режиме бинарных данных, а по-умолчанию он открывается в другом режиме.
попробуй открывать файл с ключиком "b" - примерно так:
 
Код:
FILE * hFile;
hFile = _wfopen(pszName,TEXT("wb"));
92
13 марта 2008 года
Тень Пса
2.2K / / 19.10.2006
да ничего не должно добавляться, хоть в бинарном хоть в текстовом режиме!.. ну никак!

даже если fwrite пользовать... если все размеры/длины правильно указаны, то никаких "лишних" симоволов не будет.

PS: а код стоило бы всё-таки показать.
255
14 марта 2008 года
Dart Bobr
1.4K / / 09.04.2004
Не, Тень Пса, я с этой проблемой сталкивался.
Приведу тебе цитату с мсдн:
Цитата:

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"!!

1
14 марта 2008 года
kot_
7.3K / / 20.01.2000
Цитата: Тень Пса
да ничего не должно добавляться, хоть в бинарном хоть в текстовом режиме!.. ну никак!

даже если fwrite пользовать... если все размеры/длины правильно указаны, то никаких "лишних" симоволов не будет.

PS: а код стоило бы всё-таки показать.


Черный бобр прав :)
В текстовом режиме используется символ окончания строки характерный для данной ОС. Я думаю все в курсе что Win, *nix и Mac по разному данные символы распознают?

92
17 марта 2008 года
Тень Пса
2.2K / / 19.10.2006
признаЮ, был не прав ))) погорячился )))

глянул в код ) у меня всё пишется в бинарном режиме :D

простите товарищи :)
16K
17 марта 2008 года
iRain
72 / / 12.03.2008
спасибо большое., проблема действительно была в этом. :)
Как иногда бывает все бонально и просто:)
255
17 марта 2008 года
Dart Bobr
1.4K / / 09.04.2004
Знаю-знаю, в свое время сам с этим долго долбался. было прикольно когда шла шифровка данных размером кратным 16 байт. по 16 байт а в результате получалось совсем не кратное 16 число байт :D А потом я перечитал справку и все стало на свои места :D :D
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог