EAccess Violation bei CopyFile



  • Hallo ich möchte gerne das der Benutzer Auswählen kann wo er seine Datei speichern möchte.

    So bekomme ich immer nur eine EAccess Violation.

    Wie macht man es richtig?

    char *datei;
    char *datei_neu;
    bool error;
    
    cout<<"wo liegt die datei: ";
    cin>>datei;
    
    cout<<"neuer speicherort: ";
    cin>>datei_neu;
    
    CopyFile ( datei  , datei_neu , error);
    


  • blup schrieb:

    Hallo ich möchte gerne das der Benutzer Auswählen kann wo er seine Datei speichern möchte.

    So bekomme ich immer nur eine EAccess Violation.

    Wie macht man es richtig?

    char *datei;
    char *datei_neu;
    bool error;
    
    cout<<"wo liegt die datei: ";
    cin>>datei;
    
    cout<<"neuer speicherort: ";
    cin>>datei_neu;
    
    CopyFile ( datei  , datei_neu , error);
    

    char* datei und char* datei_neu verweisen auf irgend einen zufälligen, nicht initialisierten Speicherbereich, in den cin >> nichts hineinschreiben darf.

    Vielleicht so versuchen:

    #include <cstdio>
    #include <cstring>
    using namespace std;
    int main(){
    char datei[64] = {'\0'};
    char datei_neu[64] = {'\0'};
    printf("Wo liegt die Datei? \n\t");
    fgets(datei,64,stdin);
    datei[strlen(datei)-1] = '\0';
    printf("Neuer Speicherort? \n\t");
    fgets(datei_neu,64,stdin);
    datei_neu[strlen(datei)-1] = '\0';
    /* So, und jetzt kennen wir beide Dateinamen, und koennen versuchen,
     die Dateien zu oeffnen. */
    return 0;
    }
    

    So zirka könnte es funktionieren. Man mag es als kleinen Nachteil ansehen, dass der bereitgestellte Buffer fuer die Dateinamen max. 64 Zeichen aufnehmen kann. Dann ist der Anwender eben selber schuld, wenn er sich zu lange Dateinamen ausdenkt.
    LOL



  • Hoppala
    In dieser Zeile:

    datei_neu[strlen(datei)-1] = '\0';
    

    ist eine Ungenauigkeit passiert.
    Es sollte

    datei_neu[strlen(datei_neu)-1];
    

    heißen



  • Oder so:

    std::string datei;
    std::string datei_neu;
    bool error;
    
    std::cout << "wo liegt die datei: ";
    std::getline(std::cin, datei);
    
    std::cout << "neuer speicherort: ";
    std::getline(std::cin, datei_neu);
    
    CopyFile ( datei.c_str(), datei_neu.c_str() , error);
    

Anmelden zum Antworten