Я написал небольшое приложение, которое может регистрировать некоторые данные и записывать их через 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
Все отлично работает. Настройки обновляются в том же ритме, что и файл журнала.
Я создал запись в реестре для всей программы, чтобы запускаться при каждом запуске, что также отлично работает.
Но после завершения работы или перезагрузки программа, похоже, игнорирует два файла. В файл журнала не добавляется новый контент, и настройки также не обновляются.
Я предполагаю, что это как-то связано с тем фактом, что файл журнала открыт во время выключения, но это не объясняет, почему файл настроек также не затрагивается.
Я прочитал кое-что о WM_ENDSESSION
но я не уверен, что это правильный путь.
Я открыт для всех видов ответов или других способов достижения моей цели.
После многих перезагрузок я понял, что текущий рабочий каталог указан как / system32 после запуска. Не удивительно, что файлы могут быть открыты.
Первое: в system32 таких файлов нет.
Второе: программа не имеет разрешения на запись в этот каталог.
Чтобы решить эту проблему, я изменяю каталог, используя _chdir (), и все работает как чудо.
Других решений пока нет …