in CPP Visual Studio 2010. Ich muss einige Konfigurationen von Ini-Datei lesen. Der folgende Code funktioniert nicht. kann mir jemand helfen, es zu reparieren?GetPrivateProfileStringA gibt zurück "Das System kann die angegebene Datei nicht finden." obwohl die Datei existiert
char * path = "C:\\NotBackedUp\\Workspaces\\LDAP-DLL\\LDAPTestApp\\bin\\Debug\\conf\\ldap.ini";
std::wcout << "path: " << path << std::endl;
if(!ATLPath::FileExists(path))
{
HRESULT hr = ATL::AtlHresultFromLastError();
ATLTRACE("%x\n",hr);//system could not find the file specified!
std::cout << "File not found " << std::endl;
return 0;
}
else
{
std::cout << "File found " << std::endl;
}
char valueRead[320];
int a = GetPrivateProfileStringA("ldap", "url", "error", valueRead, 320, path);
std::cout << "Value Read " << valueRead << std::endl;
std::cout << "Error String " << GetLastErrorAsString();
der obige Code unten Protokoll erzeugt, können Sie ATLPath sehen :: FileExists wahr zurückkehrt, aber immer noch getLastError Das System ist unter Angabe kann die Datei
path: C:\NotBackedUp\Workspaces\LDAP-DLL\LDAPTestApp\bin\Debug\conf\ldap.ini
File found
Value Read error
Error String The system cannot find the file specified.
Meine ldap.ini angegebene Datei nicht finden hat folgende Zeilen und ist in dem obigen Pfad
[ldap]
url=ldap://testserver
jede Hilfe sehr geschätzt wird
verfügbar 210danke
['GetPrivateProfileString'] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms724353 (v = vs.85) .aspx) ist nur für 16-Bit-Kompatibilität und sollte vermieden werden, Wenn Sie alle gemeinsam genutzten Benutzereinstellungen benötigen, sollten Sie entweder die Registrierung oder eine Konfigurationsdatei verwenden. – Mgetz
Wie in der [Dokumentation] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms724353 (v = vs.85) .aspx) gesagt: 'Hinweis Diese Funktion wird nur aus Gründen der Kompatibilität zur Verfügung gestellt mit 16-Bit-Windows-basierten Anwendungen. Anwendungen sollten Initialisierungsinformationen in der Registrierung speichern. Vielleicht sollten Sie Ihre Informationen nicht in einer Ini-Datei, sondern in der Registrierung speichern. Oder schreiben Sie Ihren eigenen ini-Dateiparser, da diese WinAPI-Funktion veraltet ist. –
Die Funktion ist erfolgreich (in dem Sinne, dass sie eine gültige Zeichenfolge zurückgegeben hat). Der Aufruf von "GetLastError" nach dem Erfolg wird den Müll zurückgeben. Selbst wenn es fehlgeschlagen wäre, rufen Sie 'GetLastError' viel zu spät auf. Zwischen dem Aufruf von 'GetPrivateProfileStringA' und dem Aufruf von 'GetLastError', die jeweils' GetLastError' hätten zurücksetzen können, machen Sie eine Menge anderer Dinge. –