ich brauch ma dringend hilfe:help:
also, ich habe einen manager für selbst geschriebene datenarchive geschrieben, seine hauptaufgabe ist es, ein archiv zu durchsuchen, und die gesuchte datei in den speicher zu mappen.
der header des archivs enthält bisher nur die länge des namens und den namen der datei, danach folgt der dateiname, und der datei inhalt.
soweit sogut, ich hab mir alles gecodet, und zum test mit folgendem code eine Datei erstellt:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
|
ofstream datei("testdatei.txt",ios::binary);
int size=3;
int namelength=8;
char* name="name.txt";
char* inhalt="sie";
datei<<size;
datei<<namelength;
datei<<name;
datei<<inhalt;
datei.close();
//in der datei steht: "38name.txtsie" ist also korrekt
|
so, nun wollte ich da mit meinem manager ran, der ctor erledigt alle aufgaben, und folgender code war schnell geschrieben:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
Virtualfile::Virtualfile(char* Name,char* archiv){
ifstream datei(archiv,ios::binary);
if(datei){
Header header;
bool datafound=false;
while(datafound==false&&!datei.eof()){//endlosschleife
datei>>header.size;
datei>>header.namelength;
char* Dateiname=new char[header.namelength];//kann man
datei.read(Dateiname,header.namelength); //das
if(string(Dateiname)==Name){ //besser machen?
datafound=true;
datapointer=malloc(header.size);
readpointer=(char*)(datapointer);
position=0;
if(datapointer){
name=Name;
datei.read(readpointer,header.size);
}
}
else
{
datei.seekg(header.size,ios::cur);
if(datei.eof()){
cout<<"datei nicht im archiv enthalten";
}
}
delete Dateiname;
}
datei.close();
}
}
|
die ladefunktion ist ansich das, was der meister dieses boards auch als tutorial gemacht hat, nur mit der stl.
als ich die funktion dann getestet hab, kam der große schock: kein wert wird richtig ausgelesen, wenn ich die werte überprüfe ändern sie sich sogar je nachdem an welcher stelle ich sie überprüfe,und manchmal gibts sogar ne access violation je nachdem wo ich prüfe, die sache ist wie verhext.
desweiteren ist das programm in einer endlosschleife gefangen.
ich dachte zuerst, ichs chreib in nicht allokierten speicher, aber das kann ich ausschließen.
mit andren worten: ich hab keinen peil was da los ist.