Datei eingeben können um diese dann zu öffnen



  • Hallo ich zeige erst mal meinen Code

    char DateiName[50];
    cout << "Bitte Phad eingeben: ";
    cin >> DateiName;
    file_in = fopen ("DateiName" , "r") ;

    Wollte so Datei öffnen indem ich c:\\e.txt als string eingebe. Funktioniert aber nicht.Wäre sehr net wenn mir jemand helfen kann



  • #include <iostream>
    #include <string>
    #include <fstream>
    
    int main()
    {
        std::string fn;
        std::cout<<"Dateiname: ";
        std::cin>>fn;
        std::ifstream f(fn.c_str());
        //mach was mit fn
        return 0;
    };
    

    Hoffe mal ich mach hier nicht dein HA



  • HI ! du kannst es aber auch so machen :

    FILE* fIn = new FILE; // FILE struktur
    
    cout << "Pfad: ";
    char* pcPfad = new char;
    cin >> pcPfad;
    
    fIn = fopen(pcPfad, "r");
    char* pcFileInhalt = new char;
    
    for (int i = 0; i < strlen(pcFileInhalt); i++)
    {
    	fread(pcFileInhalt, sizeof(char), strlen(pcFileInhalt), fIn);
    	cout << pcFileInhalt;
    }
    
    fclose(fIn);
    
    return 0;
    

    Hoffe das hilft dir auch 😃

    Zeigt sogar noch den Inhalt der Datei an 😉

    Gruß __stdcall*



  • @__stdcall* : Dir is klar dass in deinem beispiel für pcPfad und pcFileInhalt nur ein zeichen reserviert ist ?
    Kurt



  • HI !,

    denk ich net, 😉
    den ein char* ist eine Zeichenkette! bei mir funzt der Code ohne probleme

    gruß __stdcall*



  • __stdcall* schrieb:

    den ein char* ist eine Zeichenkette!

    Nein, ein char* ist nur ein Zeiger auf char. Wie lang der Speicherbereich ist, der dadurch entsteht, dass die Daten hinter diesem char bis zum nächsten Nullzeichen als Zeichenkette interpretiert werden, ändert nichts daran. Du holst nur Speicher für ein Zeichen.

    bei mir funzt der Code ohne probleme

    Und wenn du im Kuhdorf nachts bei Rot über die Kreuzung fährst, geht das auch ohne Probleme.



  • __stdcall* schrieb:

    HI !,

    denk ich net, 😉
    den ein char* ist eine Zeichenkette! bei mir funzt der Code ohne probleme

    gruß __stdcall*

    Dein code

    char* pcFileInhalt = new char; // reserviere 1 zeichen und gebe einen pointer darauf zurück
    

    Wahrscheinlich wolltest du

    const int buf_size = 1024;
      char* pcFileInhalt = new char[buf_size];
    

    Kurt



  • char* pcPfad = new char;
    

    Das Ergebnis dieser Zeile ist ganz sicher keine Zeichenkette, sondern
    lediglich ein einzelnes Zeichen. 😉



  • HI !

    stimmt ist mir grad aufgefallen 🙄 ,
    sorry.
    @ZuK: genau so hab ich des gemeint 😃
    __stdcall*



  • Ok erst mal vielen dank für eure hilfe. besonders gefallen hat mir die lösung von __stdcall*. verstehe nur nicht so ganz diese
    strlen(pcFileInhalt);
    und diese
    fread(pcFileInhalt, sizeof(char), strlen(pcFileInhalt), fIn);
    zeile



  • Ich fühl mich geehrt 😉

    fread(1, 2, 3, 4)

    1 = Zeichenkette die die gelesenen Daten enthält,

    2 = Speicherplatz der als Puffer genutzt wird (wenns net stimmt bitte korrigieren)

    3 = Länge der Zeichenkette die eingelesen werden soll (aus Datei)

    4 = FILE* Zeiger auf die Datei

    P:S les dir mal die beiträge von ZuK, MFK und RedHead durch die Variable pcFileInhalt ist KEINE Zeichenkette sondern nur ein einzelnes Zeichen.

    Mach es lieber so wie ZuK es mir gesagt hat (danke an ihn 😃 ):

    const int buf_size = 1024;
      char* pcFileInhalt = new char[buf_size];
    

    __stdcall*

    Und Danke an ZuK der mir gezeigt hat, wie ich eine Zeichenkette erstelle 😉



  • Oliver1980 schrieb:

    Ok erst mal vielen dank für eure hilfe. besonders gefallen hat mir die lösung von __stdcall*. verstehe nur nicht so ganz diese
    strlen(pcFileInhalt);
    und diese
    fread(pcFileInhalt, sizeof(char), strlen(pcFileInhalt), fIn);
    zeile

    Ja klar. Ist auch nur länger und C.



  • ness schrieb:

    Ja klar. Ist auch nur länger und C.

    Und falsch noch dazu. Hab jetzt keine Zeit mehr. Vielleicht kann jemand adnerer erklären was nicht stimmt.
    Kurt



  • OK, sorry das ich es net gut kann, ich will kein Stress, ich bin still,

    ness mach es du 😉

    __stdcall*



  • #include <iostream>      //streambasierte ein- und ausgabe
    #include <string>        //klasse string
    #include <fstream>       //streambasierte dateiein- und ausgabe
    using namespace std;     //öffne den namspace std (in dem sich alle funktionen der stl befinden)
    
    int main()
    {
        string fn;              //ein string
        cout<<"Dateiname: ";    //wir brauchen kein flush, da
                                //cout und cin mit tie verbunden sind
        cin>>fn;                //lese bis zum leerzeichen/endline ein (der string wird automatisch vergrößert)
        ifstream f(fn.c_str()); //ein lese-datei-stream. Der knostruct ist ein wenig veraltet und nimmt den namen einer datei als const char*
                                //deshalb das .c_str()
        //mach was mit fn       //eine Zahl auslesen wäre z.b.:
                                //int i;
                                //f>>i;
        return 0;
    };
    

    Muss jetzt auch los.



  • Ok ness das letzte programm ist sehr kurz und trotzdem gut zu verstehen. Also nochmal vielen dank an alle habt mir sehr geholfen 😉


Anmelden zum Antworten