C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Работа с файлами, запись/чтение данных в/из файл(а)
exp
Отправлено: 12.11.2003, 21:04


Мастер участка

Группа: Участник
Сообщений: 304



Господа/товарищи... Добрый утр/день/ночь (выбирайте сами)

1)Подскажите плз, как работать в билдыре с типизированными файлами?
Т.е. нужно создать новый файл, открыть и отредактировать существующий, сохранить созданный или измененный файл.

2) Существуют ли билдыре аналоги дельфийских функций типа
Assign, Append, Reset, Read, Write и далее по списку?

Valdemar
Отправлено: 13.11.2003, 09:30


Мастер участка

Группа: Участник
Сообщений: 433



Посмотри функции fopen, fread, fwrite, fseek и т.д.
Admin
Отправлено: 13.11.2003, 10:57


Владимир

Группа: Администратор
Сообщений: 1190



А также:

FileCreate() FileOpen() FileRead() FileWrite() FileClose() FileSeek()

----

CreateFile() OpenFile() DeleteFile() ReadFile() WriteFile()

----

Также многие компоненты имеют функции сохранения/восстановления
из файла:

CODE

  AnsiString FileName;

  Memo1->Lines->SaveToFile(FileName);
  Memo1->Lines->LoadFromFile(FileName);

  ListBox1->Items->SaveToFile(FileName);
  StringGrid1->Rows->SaveToFile(FileName);
  RichEdit1->Lines->SaveToFile(FileName);

exp
  Отправлено: 13.11.2003, 23:30


Мастер участка

Группа: Участник
Сообщений: 304



Посмотрел.

fopen, fread, fwrite, fseek, как я понял, для работу с текстовыми файлами. Во всех примерах с их помощью сохраняется только текст.
А у меня файл, содержащий структуры, к примеру, такие:

struct Man
{
AnsiString Name;
AnsiString Fame;
int Age;
int HouseNumber;
float Weight;
};
Ну, думаю понятно, что я собираюсь хранить разнотипные данные.
А во всех примерах, что я видел, никакого намека на тип файла не было.

Да. Компоненты тоже в моем случае нельзя использовать, так как они сохраняют инфу только в текстовые файлы.

Неужели в CBuilder нет того, что в Delphi описывается так


CODE

var
//...
MyFile: file of Man;
//....
begin
//....
Assign('d:\.....',MyFile);

то есть типизированных файлов?
Георгий
Отправлено: 14.11.2003, 00:05


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



Доброй ночи.
fopen имеет вторым аргументом тексовую строку и если там написать "rb" или "wb", то файл быдут открыт для двоичного чтения или записи соответственно.

В языке 'C' нет не только типизированных файлов, в нём вообще нет работы с файлами — всё это делают библиотечные функции, которые на первый взглад не умеют работать с тем, что в Pascal называется типизированными файлами, но ничто не мешает им подсунуть структуру фиксированной длины — например так:
CODE

const NamesLength=80;
struct Man
{
char Name[NamesLength];
char Fame[NamesLength];
int Age;
int HouseNumber;
float Weight;
};

void main(void)
{
Man man;
FILE *FilePtr;
FilePtr=fopen("asd.bin", "wb");
fwrite(&man, sizeof(man), 1, FilePtr );
fclose(FilePtr);
}

И функционально это будет эквивалентно тому, что в Pascal называют типизированными файлами, но на порядок более прозрачно — ведь здесь очевидно, что выполняется запись непрерывной области ОП на диск.
exp
Отправлено: 14.11.2003, 01:29


Мастер участка

Группа: Участник
Сообщений: 304



Спасибо!!!!!!!!......(100! восклицательных знаков). biggrin.gif biggrin.gif biggrin.gif

Да к тому же, я в архиве откопал примерчик, только с использованием
FileWrite,FileCreate,..... и т.п.
Да а почему файл asd.bin в твоем примере имеет расширение bin? Спрашиваю потому, что в примере из архива файл тоже имел это расширение. Что это совпадение, или в этом есть какой-то смысл?
Георгий
Отправлено: 14.11.2003, 07:29


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



смысл в расширении bin такоеже, как и в имени файла asd т.е. никакого

Вернуться в Вопросы программирования в C++Builder