2016-07-21 2 views
1

Ich verstehe diesen Code ist sehr sehr sehr optimiert, und es ist sehr wahrscheinlich sehr schwer zu verstehen, aber mein Problem ist, dass jetzt und dann, etwa alle 20 Mal, die ich kompiliere (ich verwende Code :: Blocks IDE und MinGW Compiler), wird die Datei nicht geöffnet und sagt, dass der Zugriff verweigert wird. Es ist auch erwähnenswert, dass ich kann nie starten Sie die Datei von der plain exe, nur durch den Build & Ausführen/Ausführen von Code :: Blocks Das Programm öffnet eine Textdatei namens Notes.txt, und ermöglicht es Ihnen zu schreiben , lesen oder löschen Sie Informationen in der Textdatei.Grundprogramm, das öffnet/schreibt nach einem txt zufällig stürzt ab/öffnet nicht

EDIT Es ist auch wichtig zu beachten, dass, wenn ich versuche, die Datei aus der gerade ausführbaren Datei zu starten, ich die Fehlermeldung „libgcc_s_dw2-1.dll von Ihrem Computer fehlt“ Online Dieser Fehler hat Behebungen Dazu müssen alle DLL-Dateien aus dem Ordner "bin" meines Compilers in das Stammverzeichnis meiner ausführbaren Datei verschoben werden. Dieser Fix funktioniert, um das Programm zu starten, aber das Programm stürzt unmittelbar danach ab. Dies lässt mich glauben, dass es sich um einen Compilerkonfigurationsfehler handeln könnte. Eine Klarstellung würde sehr geschätzt werden.

Ist das ein Compiler-Problem? Ist es ein Speicherleck? Obwohl ich nicht sicher bin, ob es tatsächlich die Programme Fehler (und ich entschuldige mich erneut für die schrecklich, schrecklich, chaotisch Code) ist dies das gesamte Programm;

int main(){ 

    char a; 
    char c; 

    int b = 0; 
    int ans = 0; 
    int err = 0; 
    int isopen = 0; 
    int deleteerror = 0; 
    int god = 0; 

    string info; 
    string docinsert; 
    string writeto; 

    fstream notes; 
    notes.open("notes.txt"); 

    cout << "What would you like to do to the text in this document?"<<endl<<"Over[W]rite, [R]ead, [D]elete." << endl; 
    cin >> a; 
    while (b != 1){ 
     if (err != 0){ 
      cout << "Please retry." << endl; 
      cin >> a; 
     } 
     switch(a){ 
      case 'W': 
      case 'w': 
      b = 1; 
      ans = 1; 
      break; 

      case 'R': 
      case 'r': 
      b = 1; 
      ans = 2; 
      break; 

      case 'D': 
      case 'd': 
      b = 1; 
      ans = 4; 
      break; 

      default: 
      err = 1; 
      cout << "An error has occurred." << endl; 
} 
} 

    if (notes.is_open()){ 
    isopen = 1; 
     switch (ans){ 

     case 1: 
       cout << "Please write what you wish to put within the document.\nThis will DIRECTLY overwrite anything previously written.\nIn order to avoid unwanted characters, delete before overwriting." << endl << endl; 
       cin.clear(); 
       cin.sync(); 
       getline(cin, docinsert); 
       cout << endl; 
       notes << docinsert; 
       break; 

     case 2: 
       cout << endl << "This is what is currently written within the document:" << endl; 
       getline(notes, info); 
       cout << info << endl; 
       break; 

     case 4: 
       cout << endl << "This is what is currently written within the document:" << endl; 
       getline(notes, info); 
       cout << info << endl; 
       cout << endl << "Please confirm you wish to delete all information in this document.\n[D]elete, [C]ancel.\n\n"; 
       cin >> c; 
       while (god != 2){ 
        if (god = 1){ 
         cout << "Please repeat input to verify.\n"; 
         cin >> c; 
        } 
       if (c == 'D' || c == 'd'){ 
        notes.close(); 
        ofstream notes("notes.txt"); 
        cout << "File wiped." << endl; 
        return 0; 
       } 
       else if(c == 'C' || c == 'c'){ 
        cout << "\nNo information removed."; 
        return 0; 
       } 
       else{ 
        cout << "An error has occured.\n"; 
        god = 1; 
       } 
     } 

     default: 
       cout << "An error has occurred.\n"; 
       return 0; 
     } 
    } 

    else if(isopen != 1){ 
     cout << endl << "An error with reading the file has occurred.\nIf this error persists, create a text document\nnamed 'notes' in the root directory of this program.\n"; 

    } 
} 
+4

Wenn Sie einen Dateinamen wie '" notes.txt "' verwenden, wird die Datei im aktuellen Verzeichnis geöffnet, was auch immer das sein mag. An einigen Stellen haben Sie möglicherweise keine Berechtigung zum Erstellen oder In Dateien schreiben Wenn Sie einen vollständigen Pfad für den Dateinamen verwenden, wissen Sie genau, wo die Datei landet –

+0

Wenn Sie sagen "die Datei wird nicht geöffnet und sagen, dass der Zugriff verweigert wird" meinen Sie notes.txt gewonnen Öffnen Sie nicht, oder Ihr Programm wird nicht ausgeführt? Wie sieht die Meldung "Zugriff verweigert" aus? –

+0

Dieses Problem scheint nichts mit "notes.txt" zu tun zu haben, da es Probleme gibt, die ausführbare Datei auszuführen. Andere scheinen dies tun zu müssen hatte das gleiche Problem mit dieser speziellen Tool-Suite (gegoogelt). – user2672165

Antwort

-2

fstream kann lesen und schreiben. Sie müssen also im Konstruktor angeben, was Sie verwenden werden. so: "fstream note (" notes.txt ", std :: ios :: out); oder fstream note (" notes.txt ", std :: ios :: in); Sie können die Datei nicht öffnen bevor Sie den "Modus" angeben

+0

Ich glaube nicht, dass dies das Problem ist, da alle Funktionen so funktionieren, wie ich es vorhabe, es passiert nur gelegentlich. Ich glaube, das ist das, was vorher erwähnt wurde, da der Zugriff auf die Datei verweigert wird. Zusätzlich, wenn ich fstream anstelle von ifstream oder ofstream verwende, initialisiert es nicht die Datei, von der geschrieben und gelesen werden soll? – zachary

+0

fstream hat den Standard-Öffnungsmodus. – user2672165

Verwandte Themen