2012-03-29 19 views
0

Ich muss die Parameter in der Schreibfunktion verketten. Wie würde ich das tun?Verketten Schreibparameter in C++

Beispiel: ofstream write(newFolder concat "/newfile.txt");

mkdir(newFolder); 
ofstream write (wantTo "concat here"); 
write << "Sup mo fo"; 
write.close(); 
+1

'std :: string' unterstützt '+' Operator, hast du es versuchen ? – littleadv

Antwort

1

Wenn newFolder ist ein std :: string, können Sie einfach newFolder + "/newfile.txt" verwenden. Sie müssen sicherstellen, dass newFolder nicht mit einem / oder einem \ obwohl endet. Möglicherweise müssen Sie die c_str() Funktion für Ihre Std :: Zeichenfolge verwenden, wenn Sie ein Char * in Ihrer write Funktion benötigen.

+0

Es wäre gut, "std :: string" von "string literal" oder "C-style string" zu unterscheiden. Nur 'std :: string' unterstützt den Operator' + '. –

+0

@ Robᵩ du hast recht; erledigt. –

0

Während die Verwendung von std::string der bevorzugte Weg ist, seien Sie vorsichtig, da ältere Versionen der Standardbibliothek keine open-Methode unterstützen, die ein std::string als Argument akzeptiert.

Wenn Sie einen Fehler im Aufruf von open erhalten, wenn std::string verwenden, dann haben Sie es in zwei Schritten vor:

std::string newFolder = "/path/to/folder"; 
mkdir(newFolder.c_str(), 0644); // The 'mkdir' function wants 'const char *' 

// Has to concatenate strings here if your standard library is too old 
std::string folderAndFile = newFilder + "/filename"; 

std::ofstream output(folderAndfile.c_str()); 
+0

Können Sie den 'const char *' Teil des mkdir Aufrufs erklären? – Cjueden

+0

@Cjueden Der Systemaufruf 'mkdir' ist eine alte C-Funktion und kennt keine C++ - Klassen wie' std :: string'. Wenn Sie sich die [Manual Page für 'mkdir'] anschauen (http://linux.die.net/man/2/mkdir), sehen Sie, dass das Pfadargument vom Typ' const char * 'ist, welches von [ 'std :: string :: c_str'] (http://en.cppreference.com/w/cpp/string/basic_string/c_str). –