Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Datei Cursor an den Anfang der Datei setzen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
15.01.2003, 14:33 Uhr
Ronin



Hallo,
ich habe ein kleines Problem bei einem C-Programm. Ich hab eine Suche und Ersetze Funktion geschrieben, die eine bestehende Datei Zeichen für Zeichen einliest. Wenn sie bei einem bestimmten Marker (Sonderzeichen) ankommt, soll sie eine bestimmte Anzahl Zeichen aus einem char Feld in die Datei schreiben und dabei die Zeichen, die in der Datei an dieser Stelle stehen, überschreiben. Ich habe nur ein kleines Problem, wenn ich die Datei mit fopen() und w+ als zweiten Parameter öffne, wird die Dateilänge auf 0 gesetzt, also der gesamte Inhalt gelöscht, mit a+ habe ich zwar Lese und Schreibrechte, aber der Cursor steht schon am Ende der Datei.

Meine Frage ist also, ist es möglich, den Cursor wieder an den Dateianfang zu setzen, damit ich die Datei von Anfang bis Ende durchsuchen kann?

Ich hoffe, mein Problem gut genug beschrieben zu haben, solltet ihr den Code dazu sehen wollen, laßt es mich wissen...

Vielen Dank schonmal,

Ronin
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
15.01.2003, 15:43 Uhr
virtual
Sexiest Bit alive
(Operator)


Wenn du "r+" als Mode verwendest, wird die Datei zum Lesen+Schreiben geöffnet und du landest am Dateianfang. Solltest Du danach trotzdem noch das Bedürfnis haben, der Cursor zu verschieben, kannst du fseek benutzen.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
15.01.2003, 16:56 Uhr
~Ronin
Gast


Danke, es hat funktioniert, der Cursor steht jetzt an der richtigen Stelle. Aber wenn ich jetzt etwas mit fprintf() hineinschreibe, wird an der Datei keine Änderung vorgenommen. fprintf() gibt keinen Fehlerwert zurück, aber ich weiß nicht, ob es vielleicht nicht funktioniert, weil die Datei nicht leer ist. Ich schätze aber mal, daß bestehende Zeichen einfach überschrieben werden müßten.
Oder werden Lese und Schreibzugriffe separat behandelt? Ich hab irgendwas davon gelesen, man müßte jeweils vom Lese- in den Schreibmodus wechseln und umgekehrt. Kann ich mir allerdings nicht vorstellen, da man ja nur eine Cursorposition hat...

Oder darf ich vielleicht nicht fprintf() benutzen, gibt es eine andere Möglichkeit?

Ronin
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
15.01.2003, 17:14 Uhr
virtual
Sexiest Bit alive
(Operator)


Beim Modus r+ mus die Datei vorhanden sein, bei a+ nicht. Das ist jetzt das einzoge, was ich mir so vorstellen kann, denn das hier überschreibt die ersten paar Zeichen der Datei "test" mit dem Text "OVERWRITE":

C++:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>

int main()
{
    const char* filename = "test";
    const char* text_to_write = "OVERWRITE";
    FILE* f;

    /*
     * Open file
     */

    if (NULL == (f=fopen(filename, "r+")) && ENOENT==errno)
    {
        f = fopen(filename, "a+");
    }
    if (NULL == f)
    {
        fprintf(stderr, "cannot open %s: %s\n", filename, strerror(errno));
        exit(EXIT_FAILURE);
    }

    /*
     * Overwrite something
     */

    if (strlen(text_to_write)!=fprintf(f, text_to_write))
    {
        fprintf(stderr, "cannot write %s: %s\n", filename, strerror(errno));
        exit(EXIT_FAILURE);
    }

    fclose(f);
}


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
16.01.2003, 15:56 Uhr
Ronin



ok, es funktioniert tadellos. Der Fehler mit fprintf() lag woanders dran, ich muss ja jetzt nicht sagen, woran...

Jedenfalls noch mal vielen Dank

Ronin
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: