2016-03-31 20 views
-2

Abrufen einer Zeichenfolge aus der INI-Datei für die Anmeldung funktioniert nicht. Bitte schlagen Sie keine dieser Phasen oder irgendetwas vor. Es sei denn, das wird nicht funktionieren. BAbrufen einer Zeichenfolge aus der .ini-Datei

char* pResult = new char[255]; 
GetPrivateProfileString("login", "uname", "", pResult, 255, "C:\\Program Files\\myfile\\login.ini"); 
if (pResult == "1"){ 
    g_pCVar->ConsoleColorPrintf(Color::Purple(), 
     "----Login-Succesfull----\n"); 

} 

else{ 
    g_pCVar->ConsoleColorPrintf(Color::Purple(), 
     "----Login-Failed----\n"); 

} 
delete[] pResult; 

Hier ist die .ini-Datei.

[login] 
uname=1 

Könnte jemand bitte vorschlagen, was das Problem ist. Könnte es sein, weil ich von Programmdateien lese. Ich hatte ein Problem, als ich von Temp gelesen habe? Vielen Dank.

+0

Was ist 'GetPrivateProfileString'? –

+0

@Mohit Jain: Ist das nicht eine der Standard-Windows-Funktionen zum Lesen von Schlüsseln aus Ini-Dateien? – DrDonut

+1

Aus der Dokumentation * Diese Funktion ist nur für die Kompatibilität mit 16-Bit-Windows-basierten Anwendungen vorgesehen. * Verwenden Sie eine andere Möglichkeit für den Zugriff auf Ini-Dateien. Warum prüfen Sie den Rückgabewert nicht auf Fehler? –

Antwort

6
if (pResult == "1") 

Das ist falsch, hier vergleichen Sie die Zeiger, nicht die tatsächlichen Daten von denen gezeigt. Sie sollten so etwas wie if (std::strcmp(pResult,"1") == 0) (strcmp Groß- und Kleinschreibung)

In windows gibt es auch eine _stricmp (Groß- und Kleinschreibung) verwenden.

Ich erinnere mich zurück in dem Tag, als ich einen kleinen Helfer wie dieser schrieb:

std::string get_profile_string(LPCSTR name, LPCSTR key, LPCSTR def, LPCSTR filename) 
{ 
    char temp[1024]; 
    int result = GetPrivateProfileString(name, key, def, temp, sizeof(temp), filename); 
    return std::string(temp, result); 
} 

Wenn kleine String Optimierung aktiviert ist, wird es verwendet werden, wenn result klein genug ist (also keine Speicherzuweisung passieren würde) . Es gibt eine Grenze von 1024 Zeichen, die Sie erhöhen können, wenn Sie natürlich brauchen.

Die std::string Klasse überlastet den gleich == Operator, so dass diesmal if (pResult == "1") tatsächlich funktioniert.

string result = get_profile_string("login", "uname", "", "C:\\Program Files\\myfile\\login.ini"); 

if (result == "1") 
    g_pCVar->ConsoleColorPrintf(Color::Purple(), "----Login-Succesfull----\n");  
else 
    g_pCVar->ConsoleColorPrintf(Color::Purple(),"----Login-Failed----\n"); 

aber ideal, wenn Sie einfach eine ganze Zahl wollen, dann sollten Sie nicht GetPrivateProfileString überhaupt. Verwenden Sie stattdessen GetPrivateProfileInt

int age = GetPrivateProfileInt("user", "age", 0, "C:\\Program Files\\myfile\\login.ini"); 

if (age >= 18) 
{ }  
else 
{ } 
+0

Ich bezweifle, dass der Hinweis über Int hilfreich ist, da es aussieht, als ob er versucht, einen Benutzernamen für eine Anmeldung zu erfassen, wobei er den Wert 1 als einfachen Test verwendet. – kfsone

+0

@kfsone Mein Fehler, ich habe die Parameternamen nicht gelesen. Ich habe meine Antwort ein wenig aktualisiert. – Jts

+0

Ich benutze Int und es funktioniert ruhig gut :) nur hoffen String wäre einfacher zu bedienen, aber ich denke, ich muss eine dieser Bibliotheken dank tho –

Verwandte Themen