2009-02-08 4 views
2

Cela devrait être un problème assez trivial. J'essaye d'ouvrir un ofstream en utilisant une chaîne std :: string (ou std :: wstring) et j'ai des problèmes pour que cela fonctionne sans une mauvaise conversion.Ouvrir un fichier avec std :: string

std::string path = ".../file.txt"; 

ofstream output; 

output.open(path); 

Idéalement, je ne veux pas avoir à convertir cela en main ou impliquent des pointeurs char de style c s'il y a une façon plus agréable de le faire?

Répondre

9

Dans la chaîne de chemin, utilisez deux points au lieu de trois.

Vous pouvez également utiliser la méthode 'c_str()' sur une chaîne pour obtenir la chaîne C sous-jacente.

output.open(path.c_str()); 
+0

sur place, merci. – Dan

2

cela devrait fonctionner:

output.open(path.c_str())

0

Je crains qu'il est tout simplement pas possible. Vous devez utiliser c_str, et oui, ça craint. Par ailleurs, l'utilisation de char * signifie également que fstream ne prend pas en charge les noms de fichiers Unicode ... une honte.

+0

wfstream pour std :: wstring quelqu'un? – KTC

+0

Pas besoin d'un type de flux spécial, il suffit de surcharger open() pour prendre un std :: wstring. – KeithB

+0

Le constructeur basic_fstream accepte _only_ const char * (jamais wchar_t). Voir la norme: 27.8.1.6 –