Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Программирование под Windows > C++ Builder
Перезагрузить страницу При Бинарной записи и чтения с файла происходит ошибка
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Geniy Geniy вне форума
Новичок
 
Сообщений: 11
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 14.06.2007
По умолчанию При Бинарной записи и чтения с файла происходит ошибка - 20.05.2010, 12:23

Добрый день
Пользуюсь C++Builder 5.

При Бинарной записи и чтения с файла происходит ошибка.
Некоторые данные не корректно считываются.
Вот на картинке пример:
3 и 4 запись не правильно считывают Cod и Oc, которые есть значением int





По коду могу сказать, однотипная запись значений в базу данных, ничего трудного, но ошибка возникает.
Мне кажется что при считывании гдето теряется какойто байт и происходит перескакивание, и не правильное чтение.
Уже проверил код раз 100 и все там корректно.
Может проблемы из за совместимости C++Builder 5 и Windows 7?
Кстати а программы написанные на C++Builder 6 и C++Builder 5 совместимы полностью?
Код:
void BaseList::Open(FILE* stream)
{
    rewind(stream);
    Massiv = new Student[1000];
    int LengthOfElements = 0;
    fread(&LengthOfElements, sizeof(int), 1, stream);


    for(int i = 0; i < LengthOfElements; i++)
    {
        int LenOfMode;
        fread(&LenOfMode, sizeof(int), 1, stream);
        char* mode = new char[LenOfMode];
        fread(mode, sizeof(char), LenOfMode, stream);
        AnsiString Mode(mode);

        int Spec;
        fread(&Spec, sizeof(int), 1, stream);

        int Group;
        fread(&Group, sizeof(int), 1, stream);

        int LenOfSurname;
        fread(&LenOfSurname, sizeof(int), 1, stream);
        char* surname = new char[LenOfSurname];
        fread(surname, sizeof(char), LenOfSurname, stream);
        AnsiString Surname(surname);

        int Code1;
        fread(&Code1, sizeof(int), 1, stream);
        int Rate1;
        fread(&Rate1, sizeof(int), 1, stream);

        int Code2;
        fread(&Code2, sizeof(int), 1, stream);
        int Rate2;
        fread(&Rate2, sizeof(int), 1, stream);

        int Code3;
        fread(&Code3, sizeof(int), 1, stream);
        int Rate3;
        fread(&Rate3, sizeof(int), 1, stream);

        Student* student = new Student(Mode, Spec, Group, Surname,
                                       Code1, Rate1, Code2, Rate2,
                                       Code3, Rate3);
        BaseList::Add(student);
    }
}
Код:
void BaseList::Save(FILE* stream)
{
    rewind(stream);
    fwrite(&Count, sizeof(int), 1, stream);

    for(int i = 0; i < Count; i++)
    {
        char* mode = BaseList::get(i).getMode().c_str();
        int LenOfMode = strlen(mode);// + 1;
        fwrite(&LenOfMode, sizeof(int), 1, stream);
        fwrite(mode, sizeof(char), LenOfMode, stream);

        int spec = BaseList::get(i).getSpec();
        fwrite(&spec, sizeof(int), 1, stream);

        int group = BaseList::get(i).getGroup();
        fwrite(&group, sizeof(int), 1, stream);

        char* surname = BaseList::get(i).getSurname().c_str();
        int LenOfSurname = strlen(surname);// + 1;
        fwrite(&LenOfSurname, sizeof(int), 1, stream);
        fwrite(surname, sizeof(char), LenOfSurname, stream);

        int code1 = BaseList::get(i).getCode1();
        fwrite(&code1, sizeof(int), 1, stream);
        int rate1 = BaseList::get(i).getRate1();
        fwrite(&rate1, sizeof(int), 1, stream);

        int code2 = BaseList::get(i).getCode2();
        fwrite(&code2, sizeof(int), 1, stream);
        int rate2 = BaseList::get(i).getRate2();
        fwrite(&rate2, sizeof(int), 1, stream);

        int code3 = BaseList::get(i).getCode3();
        fwrite(&code3, sizeof(int), 1, stream);
        int rate3 = BaseList::get(i).getRate3();
        fwrite(&rate3, sizeof(int), 1, stream);
    }
}
Ответить с цитированием
  (#2 (permalink)) Старый
FataLL FataLL вне форума
Member
 
Аватар для FataLL
 
Сообщений: 1,783
Сказал(а) спасибо: 2
Поблагодарили 25 раз(а) в 25 сообщениях
Регистрация: 04.11.2004
По умолчанию 20.05.2010, 16:03

Трудно что-либо сказать, ибо проверить достаточно проблематично в виду отсутствия 5-ого билдера. И данные надо выдумывать... Скажу одно, в 5-ке точно был серьёзный косяк на моей памяти. Хоть и с БД связанный, но был. Лечилось патчем. Отсюда вопрос: все ли патчи установлены? Второе. Почему бы не пользоваться структурой? Так ведь гораздо эффективнее. И проще....
Ответить с цитированием
  (#3 (permalink)) Старый
Geniy Geniy вне форума
Новичок
 
Сообщений: 11
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 14.06.2007
По умолчанию 20.05.2010, 17:50

Сейчас при открытия указал что файл бинарный, теперь интовские числа работают без проблем. То ли так повезло, что хорошие значения указал, то ли исправило ошибку эту.
Но проблема с фамилией в третей строке остается, кстати фамилия та же.

Билдер 5-й без патчей. Если надо патч, какой бы мне поставить? или там он один?
Как на счет того, если я прогу напишу на 6-ом, она будет без проблем запускаться на 5-ом? или там возможны все-равно ошибки?


Структуру не использую, потому что сама запись есть классом, которую я пробовал записывать в файл, но вот с типом AnsiSting возникла проблема.... он не читался и не записывался.
А изменять типы переменных уже поздно, так как большая часть проги написана.
Можно конечно было создать структуру, но что то мне кажется это много не поменяет...
Ответить с цитированием
  (#4 (permalink)) Старый
Alexiski Alexiski вне форума
Любитель давать советы
 
Сообщений: 4,251
Сказал(а) спасибо: 26
Поблагодарили 51 раз(а) в 51 сообщениях
Регистрация: 16.10.2005
По умолчанию 20.05.2010, 18:00

Надо прежде всего смотреть внутрь файла, что у Вас там творится в двоичном виде.
Потом смотреть отладчиком, действительно ли сбой при чтении, или всё где-то потом портится.

Скорее всего, где-нибудь маленький ляп.
Вот, например, в окончательном варианте Вы прибавляете 1 к длине фамилии? Если нет, надо обязательно писать
Код:
AnsiString Surname(surname, LenOfSurname);
Ответить с цитированием
  (#5 (permalink)) Старый
Geniy Geniy вне форума
Новичок
 
Сообщений: 11
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 14.06.2007
По умолчанию 20.05.2010, 20:40

Цитата:
Надо прежде всего смотреть внутрь файла, что у Вас там творится в двоичном виде.
Потом смотреть отладчиком, действительно ли сбой при чтении, или всё где-то потом портится.

Скорее всего, где-нибудь маленький ляп.
Вот, например, в окончательном варианте Вы прибавляете 1 к длине фамилии? Если нет, надо обязательно писать
<div class='codetop'>Код C++
<div class='codemain'>AnsiString Surname(surname, LenOfSurname);[/code][/quote]


Спасибо.
Сейчас кажется все работает хорошо.
Ответить с цитированием
Ads.
Ads
Ответ

Опции темы
Опции просмотра

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема чтения данных из файла с DataInputStream X-Cite_Forever J2ME 0 01.09.2011 18:38
При установке аудио-драйверов происходит критическая ошибка. Ruslan_94 Любые вопросы от новичков 15 31.03.2011 18:11
чтения дерева из файла b1nary Prolog 1 30.09.2010 00:29
С++ класс потока записи/чтения winamp Зацените! 4 29.08.2009 18:10
Закрытие файла после чтения NecroGlaz C++ Builder 3 04.12.2007 01:39
открытие файла для чтения Алек_Л Visual Basic 1 05.10.2006 17:45
Оптимизация чтения структуры файла Smolnyj Assembler 9 21.01.2006 03:19
Расчет общего времени чтения файла dostar Вопросы начинающих программистов 0 16.09.2005 13:49
Как узнать номер головки чтения записи imported_andruxa Assembler 10 28.07.2005 23:37
Фриварный компонент для чтения данных из Excel файла CrazyPitbull C++ Builder 2 26.04.2004 14:00
При попытки чтения из порта происходит зацикливание Anonymous Visual C++ 1 10.10.2003 11:38
Модем не звонит, ничего не происходит, в ret возвращается ошибка 668 Hux0r C++ Builder 5 29.06.2003 15:27



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов