[C++] Что-то я запутался.... по поводу сохранения массива в файл (желательно Builder)14.06.01 01:29 Число просмотров: 1174 Автор: + <Mikhail> Статус: Elderman
struct S
{
char name[MAX_PATH];
char path[MAX_PATH];
};
structG
{
S S1[50];
char name[MAX_PATH];
};
struct B
{
G G1[100];
char name[MAX_PATH];
char path[MAX_PATH];
bool Is;
};
B B1[20];
int open;
open=FileOpen(GetCurrentDir()+"\\xxxx.xxx",
fmOpenRead);
FileRead(open, B1, sizeof(B)*20);
//. . . . ne zabud` FileClose(...)
open=FileOpen(GetCurrentDir()+"\\xxxx.xxx",fmOpenWrite);
FileWrite(open, B1,sizeof(B)*20);
Konechno variant ne racional`nyi no budet rabotat` i ot tvoego koda ne slishkom otlichaets`ia
Voobche dinamicheski allociruui pamiat`, no v etom sluchaet ty ne mozhesh ispolzovat` etot koda , zapisyvat` kazdyi member otdel`no ispolzuia loop.
[C++] Что-то я запутался.... по поводу сохранения массива в файл (желательно Builder)14.06.01 01:02 Автор: shot Статус: Незарегистрированный пользователь
Привет всем..:)
Вот по поводу сохранения массива в файл средствами Builder, то бишь FileWrite...... Привожу свою проблему на конкретном примере.:
но для начала строение функции FileWrite:
int FileWrite(int Handle, const void *Buffer, unsigned int count);
int FileRead(int Handle, const void *Buffer, unsigned int count);
теперь проблемс:
допустим следующий код:
class S
{public:
AnsiString name;
AnsiString path;};
class G
{public:
S S1[50];
AnsiString name;};
class B
{public:
G G1[100];
AnsiString name;
AnsiString path;
bool Is;};
теперь, после описания основных классов, делаем следующее объявление:
B B1[20];
Вот, и наконец считываем массив данных типа B из файла...:
......тут не важно........
int open;
open=FileOpen(GetCurrentDir()+"\\xxxx.xxx", fmOpenRead);
FileRead(open, здесь указываем &B1[20], sizeof(B));
.....дальше не важно....
//не создавал буфера, а указал конкретно....
и случай с записью, эдентичен.... только
open=FileOpen(GetCurrentDir()+"\\xxxx.xxx",fmOpenWrite);
FileWrite(open,B1[20],sizeof(B));
...................................
Если бы дело было не с массивом, то все бы работало как надо... но здесь он и записать толком не может и считать.... что только не делал, нифига не выходит... может кто догнал, как и где я ошибаюсь....?
[C++] Что-то я запутался.... по поводу сохранения массива в файл (желательно Builder)14.06.01 01:04 Автор: shot Статус: Незарегистрированный пользователь
> Привет всем..:) > Вот по поводу сохранения массива в файл средствами Builder, > то бишь FileWrite...... Привожу свою проблему на конкретном > примере.: > > но для начала строение функции FileWrite: > int FileWrite(int Handle, const void *Buffer, unsigned int > count); > int FileRead(int Handle, const void *Buffer, unsigned int > count); > > теперь проблемс: > допустим следующий код: > > class S > {public: > AnsiString name; > AnsiString path;}; > > class G > {public: > S S1[50]; > AnsiString name;}; > > class B > {public: > G G1[100]; > AnsiString name; > AnsiString path; > bool Is;}; > > теперь, после описания основных классов, делаем следующее > объявление: > B B1[20]; > > Вот, и наконец считываем массив данных типа B из файла...: > ......тут не важно........ > int open; > open=FileOpen(GetCurrentDir()+"\\xxxx.xxx", fmOpenRead); > FileRead(open, здесь указываем &B1[20], sizeof(B)); > .....дальше не важно.... > //не создавал буфера, а указал конкретно.... > > и случай с записью, эдентичен.... только > open=FileOpen(GetCurrentDir()+"\\xxxx.xxx",fmOpenWrite); > FileWrite(open,B1[20],sizeof(B)); > ................................... > > Если бы дело было не с массивом, то все бы работало как > надо... но здесь он и записать толком не может и > считать.... что только не делал, нифига не выходит... может > кто догнал, как и где я ошибаюсь....?
делаю поправку к своему же сообщению:
FileWrite(open,&B1[20],sizeof(B)); - вот...:) сорри:)
[C++] Что-то я запутался.... по поводу сохранения массива в файл (желательно Builder)14.06.01 01:29 Автор: + <Mikhail> Статус: Elderman
struct S
{
char name[MAX_PATH];
char path[MAX_PATH];
};
structG
{
S S1[50];
char name[MAX_PATH];
};
struct B
{
G G1[100];
char name[MAX_PATH];
char path[MAX_PATH];
bool Is;
};
B B1[20];
int open;
open=FileOpen(GetCurrentDir()+"\\xxxx.xxx",
fmOpenRead);
FileRead(open, B1, sizeof(B)*20);
//. . . . ne zabud` FileClose(...)
open=FileOpen(GetCurrentDir()+"\\xxxx.xxx",fmOpenWrite);
FileWrite(open, B1,sizeof(B)*20);
Konechno variant ne racional`nyi no budet rabotat` i ot tvoego koda ne slishkom otlichaets`ia
Voobche dinamicheski allociruui pamiat`, no v etom sluchaet ty ne mozhesh ispolzovat` etot koda , zapisyvat` kazdyi member otdel`no ispolzuia loop.
Спасибо, что откликнулся! Спасибо за совет, попробую так, как ты сказал.:) Еще раз спасибо!:)14.06.01 23:08 Автор: shot Статус: Незарегистрированный пользователь