Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / В чем ошибка? / 4 сообщений из 4, страница 1 из 1
10.03.2004, 17:34
    #32436754
ln
ln
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем ошибка?
Есть следующий код
hSourceFile = _open((LPSTR) m_lpszEntryName,_O_RDONLY | _O_TEXT );
lFileLen = _filelength(hSourceFile);
lpszImportSyntax = (LPSTR) malloc((size_t) lFileLen+1);
_read(hSourceFile,lpszImportSyntax,lFileLen);
_close(hSourceFile);
hSourceFile =_open("CompErr1.log",_O_RDWR | _O_TEXT | _O_CREAT );
_write(hSourceFile,lpszImportSyntax, lFileLen);
_close(hSourceFile);
по идеи CompErr1.log должен быть идентичен файлу с которого мы считали информацию на самом же деле он получается немного другим (последняя строка дублируется два раза). В чем ошибка ни как не могу понять?
...
Рейтинг: 0 / 0
10.03.2004, 22:33
    #32437036
guest
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем ошибка?
Тк указан _O_TEXT, то файл открывается в текстовом режиме. Это значит, что после вызова функции read(), в буфере будет заменена последовательность символов 0x0D 0x0A на 0x0A, те символы 0x0D просто удаляются из буфера. Значит длина прочитанных данных будет меньше длины, которую вернула функция lFileLen = _filelength(hSourceFile). При записи write() все происходит в обратном порядке, те все символы 0x0A заменяются на последовательность символов 0x0D 0x0A и длина файла увеличивается. Итак, когда мы читаем lFileLen байт, реально прочитывается меньше, хвост заполнен в общем случае произвольными данными, когда записываем lFileLen байт, то захватываем этот хвост. Вообще, единственный корректный способ определить сколько байт успешно записано или считано - это проанализировать возвращаемое значение функций read() или write().
...
Рейтинг: 0 / 0
11.03.2004, 09:00
    #32437256
Snow_Man
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем ошибка?
В дополнение к предыдущему.
Вместо _O_TEXT пользуйтесь _O_BINARY
...
Рейтинг: 0 / 0
11.03.2004, 09:06
    #32437261
ln
ln
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем ошибка?
Спасибо теперь понятно в чем дело было переписал и все зароботало.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / В чем ошибка? / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]