2017-05-31 7 views
1

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 210

danke

+0

['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

+0

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. –

+1

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. –

Antwort

0

Der Fehlercode ERROR_FILE_NOT_FOUND, den Sie erhalten, wird auch festgelegt, wenn GetPrivateProfileString einen Abschnitt oder Wert nicht finden kann.

Ihr Code funktioniert gut auf meinem Win10 mit Ihrer Ini-Datei.

Verwenden Sie einen Hex-Viewer/Editor, um zu überprüfen, ob Ihre Datei ldap.ini tatsächlich ASCII ist und dass sie BOM nicht enthält.

+0

noch nicht funktioniert hat. verwendet eine Open Source-Bibliothek https://inireader.codeplex.com/ – Ravi

Verwandte Themen