とを使用してこれを行うことができstd::string::find()
ますstd::string::replace()
。構成指定子を含む行を見つけseta r_fullscreen
たら、次のようなことができます。
std::string::size_type pos = cfgLine.find("\"0\"");
if(pos != std::string::npos)
{
cfgLine.replace(pos, 3, "\"1\"");
}
と の間に"0"
追加のスペースがある可能性があるため、構成値が特定のオフセットにあると想定しないでください。r_fullscreen
"0"
追加のコメントを確認したら、変更が行われた後に構成ファイルを更新する必要があります。文字列に加えた変更は、メモリ内のコピーにのみ適用され、ファイルには自動的に保存されません。ロードして変更した後に各行を保存し、更新内容をファイルに保存する必要があります。また、構成ファイルを更新するプロセスをdo/while
ループの外に移動する必要があります。そうでない場合は、チェックするプロセスごとにファイルを読み取り/更新します。
以下の例から始めることができます。
#include <fstream>
#include <string>
#include <vector>
std::ifstream cfgm2("players\\config_m2.cfg", std::ios::in);
if(cfgm2.is_open())
{
std::string cfgLine;
bool changed = false;
std::vector<std::string> cfgContents;
while (std::getline(cfgm2,cfgLine))
{
// Check if this is a line that can be changed
if (std::string::npos != cfgLine.find("seta r_fullscreen"))
{
// Find the value we want to change
std::string::size_type pos = cfgLine.find("\"0\"");
if(pos != std::string::npos)
{
// We found it, not let's change it and set a flag indicating the
// configuration needs to be saved back out.
cfgLine.replace(pos, 3, "\"1\"");
changed = true;
}
}
// Save the line for later.
cfgContents.push_back(cfgLine);
}
cfgm2.close();
if(changed == true)
{
// In the real world this would be saved to a temporary and the
// original replaced once saving has successfully completed. That
// step is omitted for simplicity of example.
std::ofstream outCfg("players\\config_m2.cfg", std::ios::out);
if(outCfg.is_open())
{
// iterate through every line we have saved in the vector and save it
for(auto it = cfgContents.begin();
it != cfgContents.end();
++it)
{
outCfg << *it << std::endl;
}
}
}
}
// Rest of your code
Process32First(proc_Snap , &pe32);
do {
// some loop doing something I don't even want to know about
} while ( /*...*/ );