Windowsサービスの.iniファイルから読み書きしようとしています。 iniファイルを一時的に 'C:\ test \ CppWindowsService.ini'に保存しています。プログラムはiniファイルを読み込みますが、はiniファイルの値を設定する際に問題があります。値を更新するようですが、実際には何もしません。私はgithubで利用可能なbrofieldのSimpleIniを使用しています。私は、彼らのini解析ニーズのためにオンラインで多数の人を見てきました。それはhereです。.iniファイルへの書き込み - SimpleIni SetValueは成功したように見えても何もしません。
物事のI /しようとしたこれまでに確認されました:
- セキュリティ設定:管理者、ドメイン管理者、システムおよびIがすべての読み取り/書き込みアクセスをしています。このコードセクションは、私のドメイン管理者として実行されています。
ご協力いただきありがとうございます。 3さまざまなCOUT/wcout/print文から
bool readini()
{
// Load .ini file and retrieve ClientGuid **
CSimpleIniA ini;
ini.SetUnicode();
ini.LoadFile("C:\\test\\CppWindowsService.ini");
const char * pVal = ini.GetValue("GUID", "Clientguid", NULL);
std::cout << "pVal:" << pVal << std::endl;
std::string test(pVal); // Had to convert pVal to string for unknow reason:
if (test == "noguid") // const char * "noguid" != const char[7] "noguid" ???
{ // Aren't these the exact same thing?... Compiler wasn't
// generate guid ** // throwing the error, but the if statement wouldn't pass
GUID initguid; // the condition until I did this.
HRESULT hCreateGuid = CoCreateGuid(&initguid);
// generate bstr from guid **
wchar_t* bstrGuid;
StringFromCLSID(initguid, &bstrGuid);
std::wcout << bstrGuid << std::endl;
// transform bstr to str **
std::stringstream ss;
ss << bstrGuid;
std::string guid = ss.str();
// set .ini clientguid with generated guid **
SI_Error rc = ini.SetValue("GUID", "Clientguid", guid.c_str());
if (rc < 0)
{
return false;
}
printf("key: %s\n", rc == SI_INSERTED ?
"inserted" : "updated");
::CoTaskMemFree(bstrGuid);
}
}
出力:
pval: noguid
{D002CD3F-6434-47E9-8246-06884FDE1FEA}
key: updated
のINI形式:
[GUID]
Clientguid = noguid
として、私は唯一、SimpleIni.hファイルを含めました他の人は彼らが私にとって本当に役に立たないように見えます。これは大丈夫と思われ、私が言うことができる限り、それは問題ではありません...しかし、私が間違っているかどうか教えてください!