2016-07-18 11 views
0

は、私はいくつかのデータを記録することができ、ファイルにofstreamのを経由して、それを書き込み小さなアプリケーションを書いた:シャットダウン後のファイルの処理に伴う困難や再起動は

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

このファイルは閉じられ、すべての再オープン30秒。 2番目のファイル "settings.ext"は、プログラムの動作を定義するために使用されます。

0 =可視性

1 =コンソール

:これはそうのようなファイルを読み出すために私が思い付くことができる最高だった

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); 
     } 
    } 

:関数は、次のようになります。 30 = updateInterval

すべてがうまくいきます。設定は、ログファイルがフラッシュされるのと同じリズムでリフレッシュされます。

すべての起動時に起動するようにプログラム全体に対してレジストリエントリを作成しましたが、これも正常に動作します。 しかし、シャットダウンまたは再起動後、プログラムは2つのファイルを無視するようです。新しいコンテンツはログファイルに追加されず、設定も更新されません。

これは、シャットダウン中にログファイルが開いているという事実と関係がありますが、これは設定ファイルに触れていない理由を説明しています。

私はWM_ENDSESSIONについていくつかのことを読んだことがありますが、それが正しい方法であるかどうかはわかりません。

私はすべての種類の答え、または私の目標を達成するための他の方法のために開いています。

+0

プログラムの先頭に ':: DebugBreak();'を挿入すると、自動起動時にデバッガをアタッチすることができます。 –

+0

あなたのプログラムは再起動後も全く動作していますか? –

+0

ロギング機能が正常に動作していても、正常に動作します。しかし、プログラムはファイルを開くことができません。 – Quallon

答えて

0

多くの再起動後、起動後にその現在の作業ディレクトリが/ system32と記載されています。ファイルが開かれるのは不思議ではありません。 最初に:system32にそのようなファイルがありません。 2番目:プログラムがそのディレクトリに書き込む権限を持っていません。 これを解決するには、_chdir()を使用してディレクトリを変更し、everythinkはチャームのように動作します。