Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.11.2007, 21:19   #1
Amateur
Злой прогер
 
Аватар для Amateur
 
Регистрация: 05.11.2007
Сообщений: 9
Сообщение Типизированные файлы в C++ Builder

Лично я работаю в Borland Developer Studio 2006, но помощь подойдёт и по v. 6.

Итак, с текстовыми файлами проблем нет: объявили <fstream>, объявили объект класса ofstream/ifstream и давай работать с ними как с cout/cin.

А как работать с типизированными файлами?
Конкретно: как записать в файл, а затем считать с него структуру?
Amateur вне форума Ответить с цитированием
Старый 11.11.2007, 16:17   #2
Amateur
Злой прогер
 
Аватар для Amateur
 
Регистрация: 05.11.2007
Сообщений: 9
По умолчанию

Что, никто ничего не знает про низкоуровненый ввод?!
Amateur вне форума Ответить с цитированием
Старый 11.11.2007, 16:37   #3
AlDelta
Реанимируюсь...
Участник клуба
 
Аватар для AlDelta
 
Регистрация: 19.07.2007
Сообщений: 1,445
По умолчанию Практический пример записи структуры в файл.

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

Код:
#include "fstream.h"
#include "string.h"
#include "windows.h"

void RussianMessage(char *message){
char rmessage[256];
CharToOem(message,rmessage);
cout<<rmessage;
}

int RussianMenu(){
RussianMessage("\nВведите 1 для добавления новой структуры в файл\n");
RussianMessage("Введите 2 для показа всех структур из файла\n");
RussianMessage("Введите 3 для выхода\n");
int choice;
cin>>choice;
return choice;
}

class Man{
// переменная для возраста
int age;
// переменная для имени
char *name;
// переменная для фамилии
char *surname;
public:
// конструктор с параметрами
Man(char *n,char *s,int a);
// конструктор
Man();
// деструктор
~Man();
public:
// функция ввода данных 
void Put();
// функция показа данных
void Show();
// функция сохранения в файл
void SaveToFile();
// функция показа содержимого файла
static void ShowFromFile();
};
// конструктор
Man::Man(){
  name=0;
  surname=0;
  age=0;
}
// конструктор с параметрами
Man::Man(char *n,char *s,int a){
  name=new char[strlen(n)+1];
  if(!name){
RussianMessage("Ошибка при выделении памяти !!!");
exit(1);
  }
  strcpy(name,n);
  surname=new char[strlen(s)+1];
  if(!surname){
RussianMessage("Ошибка при выделении памяти !!!");
exit(1);
  }
  strcpy(surname,s);

  age=a;
}
// деструктор
Man::~Man(){
  delete[] name;
  delete[] surname;
}
// функция ввода данных 
void Man::Put(){
  char temp[1024];
  RussianMessage("\nВведите имя:\n");
  cin>>temp;

  if(name)
  delete[] name;

  name=new char[strlen(temp)+1];
  if(!name){
RussianMessage("Ошибка при выделении памяти !!!");
exit(1);
  }
  strcpy(name,temp); 
  RussianMessage("\nВведите фамилию:\n");
  cin>>temp;
  
  if(surname)
  delete[] surname;

  surname=new char[strlen(temp)+1];
  if(!surname){
RussianMessage("Ошибка при выделении памяти !!!");
exit(1);
  }
  strcpy(surname,temp); 
  
  RussianMessage("\nВведите возраст\n");
  cin>>age;
}
// функция показа данных
void Man::Show(){
   RussianMessage("\nИмя:\n");
   cout<<name;
   RussianMessage("\nФамилия:\n");
   cout<<surname;
   RussianMessage("\nВозраст:\n");
   cout<<age<<"\n";
}
// функция сохранения в файл
void Man::SaveToFile(){
   int size; 
   fstream f("men.txt",ios::app|ios::binary);
   if(!f){
 RussianMessage("Файл не открылся для чтения !!!");
     exit(1);
   }
   // Записываем возраст
   f.write((char*)&age,sizeof(age));
   size=strlen(name);
   // Записываем количество символов в имени
   f.write((char*)&size,sizeof(int));
   // Записываем имя
   f.write((char*)name,size*sizeof(char));
   size=strlen(surname); 
   // Записываем количество символов в фамилии
   f.write((char*)&size,sizeof(int));
   // Записываем фамилию
   f.write((char*)surname,size*sizeof(char));
   f.close();
}
// функция показа содержимого файла
void Man::ShowFromFile(){
   fstream f("men.txt",ios::in|ios::binary);
   if(!f){
 RussianMessage("Файл не открылся для чтения !!!");
     exit(1);
   }
   char *n,*s;
   int a;
   int temp;
   // В цикле зачитываем содержимое файла
   while (f.read((char*)&a,sizeof(int))){
   
  RussianMessage("\nИмя:\n");

  f.read((char*)&temp,sizeof(int));
  n=new char[temp+1];
  if(!n){
RussianMessage("Ошибка при выделении памяти !!!");
exit(1);
  }
  f.read((char*)n,temp*sizeof(char));
  n[temp]='\0';
  cout<<n;

  RussianMessage("\nФамилия:\n");
  f.read((char*)&temp,sizeof(int));
  s=new char[temp+1];
  if(!s){
RussianMessage("Ошибка при выделении памяти !!!");
exit(1);
  }
  f.read((char*)s,temp*sizeof(char));
  s[temp]='\0';
  cout<<s;

      RussianMessage("\nВозраст:\n");
      cout<<a<<"\n";
  delete []n;
  delete []s;
   }
}
void
main(){
Man *a;
// Основной цикл программы 
do{
switch(RussianMenu()){
case 1: // Добавление записи
a=new Man;
a->Put();
a->SaveToFile();
delete a;
break;
case 2: // Показ всех записей
Man::ShowFromFile();
break;
case 3://  Прощание с пользователем
RussianMessage("До Свидания\n");
return;
default: // Неправильный ввод
RussianMessage("Неверный Ввод\n");
}

}while(1);

}
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте.
Правила форума => Правила раздела => Для общего развития => Помощь студентам => Перед тем, как создавать тему, скачайте себе...
P.S.: форум не песочница (с)
название статьи на сайте MS: "Отмена принудительного отключения автоматического запуска в реестре Windows"
AlDelta вне форума Ответить с цитированием
Старый 12.11.2007, 20:42   #4
Amateur
Злой прогер
 
Аватар для Amateur
 
Регистрация: 05.11.2007
Сообщений: 9
По умолчанию

Ок, большое спасибо.
Amateur вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Типизированные файлы Xeon332 Помощь студентам 8 27.02.2009 20:15
Типизированные файлы.Паскаль.help! ромка) Паскаль, Turbo Pascal, PascalABC.NET 1 17.05.2008 07:59
типизированные и нетипизированные файлы andrey4623 Общие вопросы Delphi 1 28.12.2007 19:09
Типизированные файлы и Delphi Polina Помощь студентам 8 12.12.2007 18:40
ПОМОГИТЕ!! Типизированные и нетипизированные файлы. Zebo Помощь студентам 1 08.06.2007 09:35