IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Проблема при чтении/записи информации в файл, C++ Builder
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 103
Пол: Мужской
Реальное имя: Александр

Репутация: -  0  +


Добрый вечер. Столкнулся с проблемой чтения/записи в файл. Задача в следующем: есть структура, ее необходимо записать в файл, а затем считать, причем запись может осуществляться несколько раз.

Записть организована следующим образом:

struct str
{
int m;
AnsiString vrt;
};


struct str var;
FILE *F;

var.m = 1;
var.vrt = Edit2->Text;
F = fopen("file","ab+");

fwrite(&var,sizeof(struct str),1,F);
fclose(F);


Чтение:

struct str
{
int m;
AnsiString vrt;
};


struct str var;

FILE *F;
int i = 0;

F = fopen("file","rb");
while (!feof(F))
{
fseek(F,i*sizeof(struct varan),SEEK_SET);
fread(&var,sizeof(struct str),1,F);

Edit1->Text = "";
Edit1->Text = IntToStr(var.m);

Label1->Caption = var.vrt;
i++;
}


fclose(F);


При записи вроде все нормально, но когда читаю данные из файла появляется ошибка.

Сообщение отредактировано: ninja -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Цитата
При записи вроде все нормально, но когда читаю данные из файла появляется ошибка.
Вот при записи и ошибка. Что такое AnsiString? Это указатель. Попробуй запустить вот такой код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
struct str var;
FILE *F;
var.m = 1;
var.vrt = Edit2->Text;

ShowMessage(IntToStr((int)sizeof(struct str)));
F = fopen("file","ab+");
fwrite(&var,sizeof(struct str),1,F);
fclose(F);

}

, а в Edit2 запихай строку подлиннее, символов из 20-30. И что ты получишь в качестве размера struct var? 8 байт? А как целое число и строка длинной 20 символов затолкались в 8 байт? Очень просто: 4 байта - sizeof(int) и 4 байта размер указателя, который из себя и представляет тип AnsiString. Но при записи - ничего особо страшного, ну, записал ты значение указателя в файл - фиг бы с ним. А вот при чтении - облом. Ты прочел значение указателя, но...
Прикрепленное изображение
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 27.04.2024 21:19
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name