Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > C++ > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Здесь нужно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 09.06.2011, 10:24   #1
skill_
 
Регистрация: 13.05.2011
Сообщений: 7
По умолчанию MFC: CFile::Read возвращает странные значения

Код:
UINT blockSize = 1024;
double *tempValue = new double[blockSize];
UINT readBytes = file.Read(tempValue, 8*blockSize);
pos = file.GetPosition();
В итоге: readBytes = случайное число(каждый раз разное)
pos - увеличивается на 8192(дело происходит в цикле).

Вопрос простой КАК ТАК????
Файл открыт так:
Код:
file.Open(fileName, CFile::modeReadWrite, &exception)
skill_ вне форума   Ответить с цитированием
Старый 09.06.2011, 13:08   #2
Scaevola
Пользователь
 
Аватар для Scaevola
 
Регистрация: 08.06.2011
Сообщений: 25
По умолчанию

Я что-то не пойму вопроса.UINT readBytes = file.Read(tempValue, 8*blockSize); будет возвращать случайное число.А pos будет увеличиваться на 8192 (8*1024).Что тебе вообще нужно сделать?
Scaevola вне форума   Ответить с цитированием
Старый 09.06.2011, 13:28   #3
Scaevola
Пользователь
 
Аватар для Scaevola
 
Регистрация: 08.06.2011
Сообщений: 25
По умолчанию

И зачем объявлять динамический массив типа double?
Scaevola вне форума   Ответить с цитированием
Старый 09.06.2011, 14:47   #4
skill_
 
Регистрация: 13.05.2011
Сообщений: 7
По умолчанию

Нужно файл считать порциями по blockSize.
Спрашивается какого Read() возвращает нечто несуразное, хотя, по идее должен выдавать количество считанных байт, поскольку очевидно что конец файла не достигнут, раз pos принимает верное значение.

Последний раз редактировалось skill_; 09.06.2011 в 14:56.
skill_ вне форума   Ответить с цитированием
Старый 10.06.2011, 09:03   #5
skill_
 
Регистрация: 13.05.2011
Сообщений: 7
По умолчанию

Решение нейдено, заключается в том чтобы открывать файл с параемтром CFile::typeBinary, поскольку иначе CStdioFile чувствителен к последовательностям символа конца строки и перевода каретки.
Как ни странно об этом практически ничего не сказано в документации.
Кстати тоже самое касается записи double - если не указать CFile::typeBinary - в файле получается ерунда.
skill_ вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно написать функцию, что не возвращает значения(типа процедуры на паскале) karson Общие вопросы C/C++ 2 13.03.2011 16:41
Random возвращает одни и те же значения pa6kevi4 Общие вопросы .NET 6 22.05.2010 23:27
Запрос возвращает пустую таблицу, если один из подзаросов возвращает пустую таблицу ArtInt SQL, базы данных 9 12.05.2010 15:40
Функция не возвращает значения 2.0 Winlook PHP 1 10.05.2010 00:58
Exel 2007 не возвращает значения DATE NameX Microsoft Office Excel 10 03.02.2010 12:40


16:40.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.