Öffnen und schließen einer Datei, sowie Anzeigen



  • Hallo,

    Ich habe leider ein kleines Problem und zwar üben wir momentan den Umgang mit öffnen und schließen von Dateien. nun habe ich folgende Aufgabe bekommen.
    Ich soll in der Anwendung unter C++ ein Programm schreiben das seinen eigenen Quellcode anzeigt.

    FILE*in;

    char buff[300], temp[300];

    strcpy(buff,Edit1->Text.c_str());

    in=fopen(buff, "rt");

    while(NULL!=in)
    {
    fgets(temp,strlen(???),in);
    Memo1->Lines->Add(temp);
    fclose(in);
    }

    Nun habe ich hier das problem das ich nicht weis was in die ?? rein sollte. denn ich müsste ja auf die Datei bzw. die erste Zeile verweisen, leider weiß ich nicht wie 😞



  • Wenn man schon den C++Builder hat, dann sollte man auch seine Klassen konsequent nutzen. Das Datei-Handling ist mit TFileStream wesentlich einfacher! Auf dein Problem bezogen:

    TFileStream *f = new TFileStream("Unit1.cpp",fmOpenRead);
        char *c = new char[f->Size+1];
        f->Read(c,f->Size);
        c[f->Size] = '\0';
        Memo1->Text = c;
        delete c;  //k.A. ob sich das mit TMemo verträgt
        delete f;
    

    Gruß
    Markus



  • Ja, aber wir müssen in C programmieren leider 🙂



  • Oh man, war das ein Kampf, aber immerhin eine Lösung habe ich, allerdings völlig ohne Gewähr:

    FILE *stream;
       char msg[500];  //sollte für eine Zeile reichen
    
       stream = fopen("Unit1.cpp", "r");
       fseek(stream, 0, SEEK_SET);
    
       while(fgets(msg, 500, stream)!=NULL)
       {
        int l = strlen(msg);
        msg[l-1] = '\0';  // \n Korrektur von fgets
        Memo1->Lines->Add(msg);
        }
    
       fclose(stream);
    

    Das mit der Zeilenlänge ist zwar nicht sauber gelöst, aber bei einer guten Lösung muss man es vermutlich häppchenweise einlesen. k.A. ob es auch einfacher geht.



  • Hallo

    Wenn du schon weist das du in C programmieren must warum postest du dann im Builder-Forum? 🙄

    bis bald
    akari



  • Dieser Thread wurde von Moderator/in akari aus dem Forum VCL (C++ Builder) in das Forum ANSI C verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • in C?

    das:

    Memo1->Lines->Add(temp);
    

    ist jedenfalls KEIN C, sondern C++ aus der VCL 😉



  • #include <stdlib.h>
    #include <stdio.h>
    
    int main( ) {
    
    	FILE *input = fopen( __FILE__, "r" );
    
    	if( !input ) {
    
    		fprintf( stderr, "Datei \"%s\" konnte nicht zum lesen geöffnet werden!\n", __FILE__ );
    		return EXIT_FAILURE;
    	}
    
    	while( !feof( input ) ) {
    
    		putc( fgetc( input ), stdout );
    	}
    
    	putc( '\n', stdout );
    
    	fclose( input );
    }
    

    greetz, Swordfish


Anmelden zum Antworten