powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / В чем ошибка?
4 сообщений из 4, страница 1 из 1
В чем ошибка?
    #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
В чем ошибка?
    #32437036
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тк указан _O_TEXT, то файл открывается в текстовом режиме. Это значит, что после вызова функции read(), в буфере будет заменена последовательность символов 0x0D 0x0A на 0x0A, те символы 0x0D просто удаляются из буфера. Значит длина прочитанных данных будет меньше длины, которую вернула функция lFileLen = _filelength(hSourceFile). При записи write() все происходит в обратном порядке, те все символы 0x0A заменяются на последовательность символов 0x0D 0x0A и длина файла увеличивается. Итак, когда мы читаем lFileLen байт, реально прочитывается меньше, хвост заполнен в общем случае произвольными данными, когда записываем lFileLen байт, то захватываем этот хвост. Вообще, единственный корректный способ определить сколько байт успешно записано или считано - это проанализировать возвращаемое значение функций read() или write().
...
Рейтинг: 0 / 0
В чем ошибка?
    #32437256
Snow_Man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В дополнение к предыдущему.
Вместо _O_TEXT пользуйтесь _O_BINARY
...
Рейтинг: 0 / 0
В чем ошибка?
    #32437261
ln
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ln
Гость
Спасибо теперь понятно в чем дело было переписал и все зароботало.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / В чем ошибка?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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