PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C: Datei vollständig auslesen/ausgeben


Grivel
2012-11-16, 13:49:31
Hi,

ich möchte in C gerne eine Datei vollständig und am Stück ausgeben.
Ich habe sie formatiert abgespeichert.(also nicht binär)
Die Datei hat natürlich mehrere \n drin und daher get fgets nur bis zu diesem \n

Habe ich da einen Befehl in meiner Fin/out Funktionswelt nicht gefunden? Oder gibt es keinen der ein File von Anfang bis zum EOF ausgibt?

Wenn nicht,
Wie kann ich am besten das \n beim auslesen ignorieren?

Ich hatte an etwas wie:

do
{
fgets(buffer,grösse,zu_lesende_datei);
andere Funktionen();

}while(file != EOF);

gedacht.
Aber für diese Abbruchbedingung hab ich nix echtes gefunden. Bzw. wohl eher nen Denkfehler drin.

Danke für die Antwort

pest
2012-11-16, 15:51:38
entweder du liest die datei am stück per "fread" ein und speicherst es in einem char*, durch anhängen eines \0-Charakters kannst du den Puffer wie einen String ansprechen, oder mal die fgets-Doku durchlesen. fgets liefert einen NULL-Pointer wenn das Ende der Datei erreicht ist.

also
while(fgets(buffer,max_grösse,zu_lesende_datei)!=NULL);
{

andere Funktionen();

}

oder http://www.cplusplus.com/reference/clibrary/cstdio/fgets/

Gast
2012-11-17, 09:11:04
Muss es denn mit fgets sein? Mit fgetc ist das viel einfacher und übrigens auch nicht wesentlich langsamer.


FILE *pFile;
int c;

pFile = fopen("myfile.txt","rb");

c = fgetc(pFile);
while (c != EOF) {
fputc(c, stdout);
c = fgetc(pFile);
}

fclose(pFile);


if (pFile==NULL) perror ("Error opening file");
else
{
do {
c = fgetc (pFile);
if (c == '$') n++;
} while (c != EOF);

Gast
2012-11-17, 09:16:18
Zum obigen Kommentar. Vergiss die letzten Code-Zeilen unterhalb des Code-Blocks, die habe ich versehentlich aus der fgetc Referenz dort hinein kopiert, sorry.

Grivel
2012-11-17, 19:09:28
Hm interessante Idee.

Zwischenzeitlich hatte ich es so gelöst, dass ich einfach pro Reihe die in die Datei geschrieben wurde einen count++ gemacht hatte und dann die do while Schleife das als Grenzwert für die fgets genommen hatte - funktioniert gut, ist nur bisschen mehr Code.

Die Tipps probier ich mal aus. Danke :)