🎉 Celebrating 25 Years of GameDev.net! 🎉

Not many can claim 25 years on the Internet! Join us in celebrating this milestone. Learn more about our history, and thank you for being a part of our community!

Please help me

Started by
3 comments, last by WhiteHouse 24 years, 8 months ago
Look at the 'Using File'-Subject.
Everythin' is explained there.

Bye!

Advertisement
Thanks for the response but what is in there doesn't help me. I have already tried all what all you other GameDev.net members have sugested and it doesn't work.

So, please, be a little bit more precise.
Thanks.

I think the other post uses a structure defined as such:

typedef struct
{
char string1[1024];
char string2[255];
int posX;
int posY;
} GameData;

If you do a sizeof(GameData), you'll get a value that represents the contents of the data, and a fwrite(fp, pGameData, sizeof(GameData), will work.

In your sample:

struct MyDataFile {
char* lpszEditor; //String (lp)
UCHAR** lplpucMapTile; //2D Array
UCHAR Floors = 1; //Normal UCHAR
}

this will not work, since you are storing strings as pointers with no length.

When you have data stored in a pointer, a sizeof(pointerVariable) will return the size of the pointer, not its contents. So if you have malloc'd 2MBs to a pointer, the pointer will still return 4 if you do a sizeof(pointerVar). If you need to do it this way, you will have to store your data in a different method, most likely using something like this:

For each member of your structure, you will have to save it seperately, and load it seperately, in sequence, as in the following:

SaveBlock(char *data, unsigned long int length){  // first same a number as to how long   // the data is  fwrite(fp, length, sizeof(length));  // now save the block  fwrite(fp, data, length);}

call this function with your data and the length of the data, then when loading it..

fp = fopen(filename, "wb");SaveBlock(DataFile.lpszEditor, strlen(DataFile.lpszEditor));SaveBlock(DataFile.lplpucMapTile, mapSize);fwrite(fp, DataFile.Floors, sizeof(UCHAR)); // not a pointer

Then to load:

LoadData(char **data, int *length){  // find out how long the data chunk is  fread(fp, *length, sizeof(*length));    // allocate the memory  *data = malloc(*length);    // read the data  fread(fp, *data, *length);}fp = fopen(filename, "rb");unsigned int loadLength;LoadData(*DataFile.lpszEditor, *loadLength);DataFile.lpszEditor[loadLength] = '\0'; // terminate the stringLoadData(*DataFile.lplpucMapTile, *loadLength);mapSize = *loadLength; // save this so you know how bit the mapsize wasfread(fp, *DataFile.Floors, sizeof(UCHAR)); // not a pointer

Hope that helps.. it might just be confusing.

[This message has been edited by Sphet (edited October 05, 1999).]

Is ther any file input/output commands that can write and/or read data like below to/from a file.

code:
struct MyDataFile {  char*   lpszEditor;        //String (lp)  UCHAR** lplpucMapTile;     //2D Array  UCHAR   Floors        = 1; //Normal UCHAR}

It does help but I have already created functions that do exactly that but they are so timeconsuming to use and I was hoping that perhaps windows has functions for doing it.

But OK, I'll have to accept reality.

Thanks!

This topic is closed to new replies.

Advertisement