Länge der Datei bestimmen und in den Inhalt in die Datei einfügen. EOF?



  • Hallo,

    wenn ich den Inhalt einer .txt Datei kopiere und in die neue Datei reinschreibe bekomme ich komische Zeichen am schluss. z.B.

    Hi, my name is Kristina.Þ¿w
    

    Ich mache dies mit:

    char text[100+1];
    

    und

    fscanf (datei, "%100c", text);
    text[100] = '\0';
    

    in einer if-Anweisung.

    Wie kriege ich raus, wie lange die Datei ist? Damit ich nicht [100] schreibe, sondern [LaengeDerDatei] oder sowas in einer Variable.
    Oder wie benutze ich EOF?
    Die Datei kann immer unterschiedlich gross sein.

    Ich habe jetzt versucht etwas in Google zu finden, habe aber nichts konkretes gefunden oder nur C++ mal was gesehen. Aber C++ kann ich nicht programmieren.

    LG, Kristy



  • Butterblume schrieb:

    Hallo,

    wenn ich den Inhalt einer .txt Datei kopiere und in die neue Datei reinschreibe bekomme ich komische Zeichen am schluss. z.B.

    Hi, my name is Kristina.Þ¿w
    

    Ich mache dies mit:

    char text[100+1];
    

    und

    fscanf (datei, "%100c", text);
    text[100] = '\0';
    

    in einer if-Anweisung.

    Wie kriege ich raus, wie lange die Datei ist? Damit ich nicht [100] schreibe, sondern [LaengeDerDatei] oder sowas in einer Variable.
    Oder wie benutze ich EOF?
    Die Datei kann immer unterschiedlich gross sein.

    Ich habe jetzt versucht etwas in Google zu finden, habe aber nichts konkretes gefunden oder nur C++ mal was gesehen. Aber C++ kann ich nicht programmieren.

    LG, Kristy



  • Hi!
    Bekommst du auch die komischen Zeichen, wenn du die Datei einliest und auf der Konsole ausgibst?

    Eine Textdatei mit nur einer Zeile, die maximal 100 Zeichen lang ist, kannst du so einlesen und anzeigen lassen:

    #include <stdio.h>
    
    int main()
    {
    	char buf [100+1] = {0};
    
    	char* fname = "test.txt";
    	FILE* fp = fopen ( fname, "r" );
    
    	if ( !fp )
    	{
    		perror( fname );
    		exit (1);
    	}
    
    	fgets ( buf, sizeof ( buf ), fp );
    
    	puts ( buf );
    
    	if ( fclose ( fp ) )
    	{
    		perror ( fname );
    	}
    	return 0;
    }
    

    Um die Dateigröße zu ermitteln, kannst du betriebssystem-spezifische Funktionen wie _stat benutzen oder fseek wie hier beschrieben
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39353.html
    Die Datei darf dann natürlich nicht größer als ULONG_MAX sein.

    Für größere Dateien gibt es weitere betriebssystem-spezifische Funktionen wie z.B. GetFileSize.


Log in to reply