Hallo,
Ich hab mit fopen eine Datei geöffnet und so einen Pointer der auf die
Anfangsadresse zeigt. Der nennt sich "o_file"
Jetzt möchte ich einen "Hilfspointer" machen, der zunächst auch auf die
Anfangsadresse gesetzt wird. Dieser kann dann beliebig die Datei
durchlaufen und wenn ich ihn wieder am Anfang möchte dann kann ich ihn
ja wieder mit dem Datei-Pointer laden oder?
Hier mal ein paar Codeschnipsel von mir, wo das nicht so funktioniert
wie ich das meine:
Der Block wird mehrmals so ausgeführt, jeweils mit einem anderen "Tag".
1 | h_pointer = o_file; //Pointerkopie h_pointer auf Originalpointer
|
2 | i=search_tag(h_pointer, "TALB"); //Aufruf mit der Pointerkopie h_pointer
|
3 | for(j=0; j<i; j++)
|
4 | c_tags[0][j]=fgetc(h_pointer);
|
5 | h_pointer = o_file; //Pointerkopie h_pointer auf Originalpointer o_file zurücksetzen
|
6 | i=0;
|
7 |
|
8 | //Zweites mal, ab hier klappts meistens nicht mehr
|
9 | i=search_tag(h_pointer, "TPE1");
|
10 | for(j=0;j<i;j++)
|
11 | c_tags[1][j]=fgetc(h_pointer);
|
12 | h_pointer = o_file;
|
13 | i=0;
|
Und hier die search_tag:
1 | int search_tag(FILE *h_pointer, char string[3])
|
2 | {
|
3 | int i;
|
4 | char c;
|
5 | char size[3]={0};
|
6 | printf("\n\nStarte bei: %p\n", h_pointer);
|
7 | while(c!=EOF)
|
8 | {
|
9 | c=fgetc(h_pointer);
|
10 | if(c==string[0])
|
11 | {
|
12 | c=fgetc(h_pointer);
|
13 | if(c==string[1])
|
14 | {
|
15 | c=fgetc(h_pointer);
|
16 | if(c==string[2])
|
17 | {
|
18 | c=fgetc(h_pointer);
|
19 | if(c==string[3])
|
20 | {
|
21 | for(i=0;i<4;i++)
|
22 | size[i]=fgetc(h_pointer);
|
23 | break;
|
24 | }
|
25 | }
|
26 | }
|
27 | }
|
28 | }
|
29 | i=0;
|
30 |
|
31 | i=(size[3])+ 256*(size[2]);
|
32 | fgetc(h_pointer);
|
33 | fgetc(h_pointer);
|
34 |
|
35 | return i;
|
36 | }
|
Beim ersten mal Aufrufen der Funktion findet er den Tag in der Datei
noch problemlos, manchmal auch beim zweiten Mal (hängt wohl davon ab wo
der Tag in der Datei ist!
Allerdings sollte der "suchpointer" h_pointer ja immer von Anfang an
durch die Datei laufen und so immer die ganze Datei durchsuchen!
Ist hald sehr verwunderlich, dass das für den ersten Aufruf so geht, und
für die nächsten nicht mehr!!
Hat jemand einen Rat für mich??
MFG Mixer