2016-07-18 7 views
0

Я написал небольшое приложение, которое способно войти некоторые данные и записывает его с помощью ofstream в файл:Трудности с обработкой файлов после выключения или перезагрузки

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

Этот файл закрывается и вновь открыт каждый 30сек. Второй файл «settings.ext» используется для определения поведения программ. Функция выглядит следующим образом:

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

Это было лучшее, что я мог придумать, чтобы прочитать из файла, как так:

0 = видимость

1 = Консоль

30 = updateInterval

Все работает отлично. Настройки обновляются в том же ритме, что и файл журнала.

Я создал запись реестра для всего, чтобы запускать программу при каждом запуске, что отлично работает. Но после выключения или перезагрузки программа, похоже, игнорирует два файла. В файл журнала не добавляется новый контент и обновляется параметр arent refreshd.

Я предполагаю, что это имеет какое-то отношение к тому факту, что файл журнала открыт во время выключения, но это не объясняет, почему файл настроек не тронут.

Я прочитал кое-что о WM_ENDSESSION, но я не уверен, что это правильный путь.

Я открыт для всех видов ответов или других способов достижения своей цели.

+0

Положите ':: DebugBreak();' в начале вашей программы это позволит вам прикрепить отладчик при автозапуске. –

+0

Вы уверены, что ваша программа запускается вообще после перезагрузки? –

+0

Он работает очень хорошо, даже функции регистрации работают правильно. Но программа не может открыть файлы. – Quallon

ответ

0

После многих перезагрузок я понял, что текущий рабочий каталог указан как/system32 после запуска. Неудивительно, что файлы можно открыть. Во-первых: В системе32 таких файлов нет. Во-вторых: у программы нет разрешения на запись в этом каталоге. Чтобы решить эту проблему, я меняю каталог с помощью _chdir(), и everythink работает как шарм.