Чтение файла
CFile f;
....
char szBuffer[1024];
f.Read( szBuffer,1000);
то возникли проблемы. Я думаю что проблема в этих нулях который char принимает за конец строки.
Как мне обойти эту проблему?
Мне необходимо прочесть файл(не обязательно текстовый). Но у меня возникла проблема с двоичными фалами например с файлом ворда. Я посмотрел его по битно с помощью ультраедита и увидел что после 8 бита там следует группа нулей.А так как я использую команды
CFile f;
....
char szBuffer[1024];
f.Read( szBuffer,1000);
то возникли проблемы. Я думаю что проблема в этих нулях который char принимает за конец строки.
Как мне обойти эту проблему?
Открой файл в двоичном формате
Открой файл в двоичном формате
Эффект тот же - читается только до нулей.
Эффект тот же - читается только до нулей.
Сколько читаешь? и как дальше обрабатываешь?
Как строки или как последовательност байтов?
Если как строки, то это проблема обработка, а не чтения из файла.
Сколько читаешь? и как дальше обрабатываешь?
Как строки или как последовательност байтов?
Если как строки, то это проблема обработка, а не чтения из файла.
Мне нужно прочитанные данные переслать через соккеты другому компу. Помоему проблема в типе char но без использования чара я обойтись не могу.
А как обрабатывать "как последовательност байтов"? Может как нибудь вывернусь этим способом. :)
Мне нужно прочитанные данные переслать через соккеты другому компу. Помоему проблема в типе char но без использования чара я обойтись не могу.
А как обрабатывать "как последовательност байтов"? Может как нибудь вывернусь этим способом. :)
А как ты понял, что читается только до нулей?
Мне нужно прочитанные данные переслать через соккеты другому компу. Помоему проблема в типе char но без использования чара я обойтись не могу.
Спроецируй ты файл в память и можешь его через сокеты прям целиком отправлять как есть. И работать с ним будешь как с обычным блоком в памяти, что, на мой взгляд, гораздо удобней, чем постоянная буферизация вручную.
А как ты понял, что читается только до нулей?
Посмотрел что находится в szBuffer и посмотрел через UltraEdit в шеснадцатеричном виде на документ и сравнив увиденное понял. :)
Спроецируй ты файл в память и можешь его через сокеты прям целиком отправлять как есть. И работать с ним будешь как с обычным блоком в памяти, что, на мой взгляд, гораздо удобней, чем постоянная буферизация вручную.
Подскажи пожалуйста какие функции при этом используются
Посмотрел что находится в szBuffer и посмотрел через UltraEdit в шеснадцатеричном виде на документ и сравнив увиденное понял. :)
А как ты посмотрел, что находится в szBuffer?
В дебагере глянул содержимое переменных?
Ну так дебагер, воспринимая szBuffer как C-string, и показал тебе содержимое до заверщаещего по его мнению (мнению дебагера) нуля.
Смотри дамп памяти.
Подскажи пожалуйста какие функции при этом используются
GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL
);
ASSERT(hFile != INVALID_HANDLE_VALUE);
HANDLE hMap = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL);
ASSERT(hMap);
LPVOID lpFile = MapViewOfFile(hMap, FILE_MAP_READ ,0, 0, 0);
DWORD dwFileSize = GetFileSize(hFile, NULL);