2010-12-14 10 views
1

Dies ist, wie ich versuche, das aktuelle Arbeitsverzeichnis zu erhalten:Mühe, Arbeitsverzeichnis

char* ch; 
    if((ch = _getcwd(NULL, 0)) == NULL) 
    { 
     cout << "Could not get working directory!" << endl; 
    } 
    // skonvertujme char* na string, s tym sa nizsie bude lahsie pracovat 
    stringstream ss; 
    string workingDirectory; 
    ss << ch; 
    ss >> workingDirectory; 

    cout << workingDirectory << endl; 
    cin.get(); 
    cin.get(); 

Welche ausdruckt:

C:\Users\Richard\Documents\Visual 

Anstelle des tatsächlichen Arbeitsverzeichnis:

C:\Users\Richard\Documents\Visual Studio 2010\Projects\Client\Debug 

Es scheint, als ob Ti alles nach einem Leerzeichen schneidet.

Wie kann ich das Arbeitsverzeichnis korrekt abrufen, auch wenn Leerzeichen im Pfad vorhanden sind?

Antwort

4

Der Operator >> stoppt am ersten Platz. Anstelle der Manipulation versuchen string

string workingDirectory(ch); 
4

Gerade diese ersetzen:

stringstream ss; 
string workingDirectory; 
ss << ch; 
ss >> workingDirectory; 

mit diesem:

string workingDirectory(ch); 
3

Verwenden getline(ss, workingDirectory)

Der Grund, dass ist, dass das Lesen << Operator in stringstream Stationen passiert, wenn es Leerzeichen trifft.

+1

Warum verwenden Sie den String-Stream alle an? –

+0

Ja, du hast Recht. –

1

Wenn Sie wirklich Ihre Lösung verwenden wollen - die übertrieben - mit dem noskipws io-Manipulator wie so:

ss >> noskipws >> workingDirectory;