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

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

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


Ответ
 
Опции темы
Старый 09.06.2011, 09: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, 12:08   #2
Scaevola
Пользователь
 
Аватар для Scaevola
 
Регистрация: 08.06.2011
Сообщений: 25
По умолчанию

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

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

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

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

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

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

Опции темы


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


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS
Здесь нужно купить рекламу за 7 тыс руб в месяц! )
пишите сюда - alarforum@yandex.ru
ИКС 840