2016-07-18 10 views
0

schrieb ich eine kleine Anwendung, die in der Lage ist, einige Daten zu protokollieren und schreibt sie über ofstream in eine Datei:Schwierigkeiten bei der Handhabung von Dateien nach dem Herunterfahren oder Neustart

ofstream filename;    
filename.open("filename.ext", ios::out | ios::app); 
filename << stuff; 

Diese Datei geschlossen und wieder geöffnet, jeder 30 Sekunden. Eine zweite Datei "settings.ext" wird verwendet, um das Verhalten des Programms zu definieren. Die Funktion sieht wie folgt aus:

ifstream input("settings.qib", ios::in); 
    string number; 
    for (string line; getline(input, line);) 
    { 
     if (line.find("updateInterval") != string::npos) { 
      number = ""; 
      for (int i = 0; !isspace(line.at(i)); i++) number += line.at(i); 
      updateInterval = stoi(number); 
     } 
     if (line.find("visibility") != string::npos) { 
      number = ""; 
      for (int i = 0; !isspace(line.at(i)); i++) number += line.at(i); 
      Stealth(stoi(number)); 
     } 
     if (line.find("console") != string::npos) { 
      number = ""; 
      for (int i = 0; !isspace(line.at(i)); i++) number += line.at(i); 
      console = stoi(number); 
     } 
    } 

Dies war das beste, das ich tun konnte eine Datei auszulesen, wie so:

0 = Sichtbarkeit

1 = Konsole

30 = updateInterval

Alles funktioniert super. Die Einstellungen werden im selben Rhythmus aktualisiert, in dem die Protokolldatei geleert wird.

Ich habe einen Registrierungseintrag für das gesamte Programm zum Start bei jedem Start erstellt, was auch gut funktioniert. Aber nach einem Herunterfahren oder Neustart scheint das Programm die beiden Dateien zu ignorieren. Der Protokolldatei wird kein neuer Inhalt hinzugefügt und die Einstellungen werden auch nicht aktualisiert.

Ich vermute, das hat etwas damit zu tun, dass die Protokolldatei während des Herunterfahrens geöffnet ist, aber das erklärt nicht, warum die Einstellungsdatei nicht berührt wird. Ich habe einige Dinge über die WM_ENDSESSION gelesen, aber ich bin nicht sicher, ob das der richtige Weg ist.

Ich bin offen für alle Arten von Antworten oder andere Möglichkeiten, um mein Ziel zu erreichen.

+0

Setzen Sie ':: DebugBreak();' am Anfang Ihres Programms Dies ermöglicht es Ihnen, einen Debugger anfügen, wenn der Autostart. –

+0

Sind Sie sicher, dass Ihr Programm nach einem Neustart überhaupt ausgeführt wird? –

+0

Es läuft sehr gut, auch die Protokollfunktionen funktionieren ordnungsgemäß. Aber das Programm kann die Dateien nicht öffnen. – Quallon

Antwort

0

Nach vielen Neustarts dachte ich, dass das aktuelle Arbeitsverzeichnis nach dem Start als/system32 angegeben wird. Kein Wunder, dass die Dateien geöffnet werden konnten. Erstens: In System32 sind keine solchen Dateien gefunden. Zweitens: Das Programm hat keine Berechtigung, in dieses Verzeichnis zu schreiben. Um dies zu lösen, ändere ich das Verzeichnis mit _chdir() und alles funktioniert wie ein Charme.