so, ich bin auch ma wieder da mit einem problem...
ich habe eine WAD-file (wiki.xentax.com/index.php?title=Lego_Rock_Raiders_WAD), und wollte mir ein programm schreiben, und die einzelnen daten auszulesen.
mein programm is jetzt so nen mischmasch aus C und C++, aber das is ja letzendlich ziemlich egal
auf jedenfall bekomm ich alles wunderbar eingelesen, nur wenn ich dann eine datei schreiben will, meckert er...
Alles anzeigen
der fehler muss irgentwo in der letzen for-schleife liegen, also in der ich schreib.
die erste datei funktioniert einwandfrei, aber bei der zweiten stürzt mein programm ab...
sieht vllt jmd den fehler?
(bitte nicht wegen der for(;;); meckern, die sollen nur verhindern das es einfach ausgeht)
ich hab auch gleich mal ne wad datei verlinkt, weil das spiel wahrscheinlich keiner hat, von dem ich die dateien hab.
blackshampoo.bl.ohost.de/LegoRR1.zip
danke im vorraus
ich habe eine WAD-file (wiki.xentax.com/index.php?title=Lego_Rock_Raiders_WAD), und wollte mir ein programm schreiben, und die einzelnen daten auszulesen.
mein programm is jetzt so nen mischmasch aus C und C++, aber das is ja letzendlich ziemlich egal
auf jedenfall bekomm ich alles wunderbar eingelesen, nur wenn ich dann eine datei schreiben will, meckert er...
C-Quellcode
- #include <iostream>
- #include <stdlib.h>
- using namespace std;
- struct wad_file
- {
- char name_rel[256];
- char name_abs[256];
- unsigned int version;
- unsigned int size;
- unsigned int offset;
- };
- int main(int argv, char *argc[])
- {
- FILE *wad;
- wad = fopen(argc[1], "rb");
- if(wad == NULL)
- {
- cout << "FAIL";
- for(;;);
- }
- char header[5] = {' ', ' ', ' ', ' ', '\0'};
- fread(&header, 1, 4, wad);
- if(!strcmp(header, "WWAD"))
- {
- cout << "WAD-File found!\n";
- }
- else
- {
- cout << "Wrong file-type!\n";
- for(;;);
- }
- wad_file file[3000];
- unsigned int size = 0;
- fread(&size, 4, 1, wad);
- cout << "Number of files: " << size << endl;
- cout << "\n ... start unpacking ... \n\n";
- for(unsigned int times = 0; times < size; times++)
- {
- int num = 0;
- do
- {
- file[times].name_rel[num] = fgetc(wad);
- } while(file[times].name_rel[num++] != 0x00);
- //cout << times << " " << file[times].name_rel << endl;
- }
- for(unsigned int times = 0; times < size; times++)
- {
- int num = 0;
- do
- {
- file[times].name_abs[num] = fgetc(wad);
- } while(file[times].name_abs[num++] != 0x00);
- //cout << file[times].name_abs << endl;
- }
- for(unsigned int times = 0; times < size; times++)
- {
- unsigned int size_f = 0, size_s = 0;
- fread(&file[times].version, 4, 1, wad);
- fread(&size_f, 4, 1, wad);
- fread(&size_s, 4, 1, wad);
- if(size_f != size_s)
- {
- cout << "File-size ERROR";
- for(;;);
- }
- file[times].size = size_f;
- fread(&file[times].offset, 4, 1, wad);
- }
- for(unsigned int times = 0; times < size; times++)
- {
- cout << file[times].name_rel << endl;
- cout << file[times].name_abs << endl;
- cout << file[times].version << endl;
- cout << file[times].size << endl;
- cout << file[times].offset << endl << endl;
- }
- for(unsigned int times = 0; times < size; times++)
- {
- rewind(wad);
- char j = 0;
- for(unsigned int h = 0; h < file[times].offset; h++)
- {
- fread(&j, 1, 1, wad);
- }
- FILE *output = NULL;
- output = fopen(file[times].name_rel, "wb");
- int tmp;
- cout << "Write " << file[times].name_rel << endl;
- for(unsigned int pos = 0; pos < file[times].size; pos++)
- {
- cout << "read...";
- tmp = fgetc(wad);
- cout << " ...write\n";
- fputc(tmp, output);
- }
- fclose(output);
- }
- fclose(wad);
- for(;;);
- return(0);
- }
der fehler muss irgentwo in der letzen for-schleife liegen, also in der ich schreib.
die erste datei funktioniert einwandfrei, aber bei der zweiten stürzt mein programm ab...
sieht vllt jmd den fehler?
(bitte nicht wegen der for(;;); meckern, die sollen nur verhindern das es einfach ausgeht)
ich hab auch gleich mal ne wad datei verlinkt, weil das spiel wahrscheinlich keiner hat, von dem ich die dateien hab.
blackshampoo.bl.ohost.de/LegoRR1.zip
danke im vorraus