SHGetFolderPath kein Leerzeichen(XP)

FSA

Erfahrenes Mitglied
Hallo. Ich habe folgenden Code:
C++:
stringstream ssConvert;
	// Auslesen des Pfades
	TCHAR path[MAX_PATH];
	HRESULT hResult = SHGetFolderPath(0, CSIDL_COMMON_APPDATA, 0, SHGFP_TYPE_CURRENT, path);
	if( hResult != S_OK )
	{
		// Fehler
		ERROR_MESSAGE("Fehler bei dem lesen eines Pfades");
		return false;
	}
	else
	{
		// Umwandeln von TCHAR in string
		ssConvert << path;
		ssConvert >> sOut;

		return true;
	}
Leider bekomme ich damit nur Pfade ohne Leerzeichen. Alos zB C:\Dokumente und Einstellungen wird zu C:\Dokumente. Also ab Leerzeichen kommt nichts mehr :(
Danke im Voraus.
 
Zuletzt bearbeitet von einem Moderator:
Es liegt wohl an std::stringstream:
cplusplus.com hat gesagt.:
Inserts a sequence characters coming from a c-string, i.e. s is a pointer to the first character of the sequence to be inserted. Insertion ends when the next character is either a valid whitespace or the terminating null character of the c-string, or if the End-Of-File is reached.
After a call to this version of the insertion operation, the value of the field width is automatically reset to zero.
Link: http://www.cplusplus.com/reference/iostream/ostream/operator<</
 
Hallo MSVCplusplus,

ich nehme an, sOut ist ein std::string? Warum gehst du denn den Umweg über den Stringstream? Du könntest auch direkt eine Zuweisung an sOut machen.

Allerdings musst du auch die Projekteinstellungen beachten. Bei einem UNICODE-Zeichensatz müsstest du std::wstring verwenden.

Wenn du auf dem Stringstream bestehst, musst du die Umwandlung in einen std::string dann aber so machen:
C++:
sOut = ssConvert.str();
Der >>-Operator liefert dir nur das erste Element aus dem Stringstream. Das Leerzeichen fungiert dabei als Trenner, aber das hat ja ComFreek schon geschrieben.


Gruß
Mcoder
 
Hi.

Ergo:
C++:
std::basic_string<TCHAR> sOut(path);
Falls du immer einen std::string herausbekommen möchtest, mußt du im Unicode Fall zur ANSI oder OEM Codepage konvertieren.

Gruß
 
Zurück