2009-10-31 2 views
2

Je sais que c'est plutôt risible, mais je n'arrive pas à faire fonctionner le simple code C++ ofstream. Pouvez-vous s'il vous plaît me dire ce qui pourrait être mauvais avec le code suivant:Impossible d'ouvrir fstream lors de la spécification d'un chemin absolu

L'ouverture de l'ofstream échoue chaque fois que je spécifie un chemin absolu. Les chemins relatifs semblent fonctionner sans problèmes. Je suis vraiment incertain quant à la question ici.

+2

Oh, apparemment 'C: \' est pas acceptée comme un chemin valide. C'est plutôt malheureux, car j'essaye d'écrire dans un chemin spécifié par la variable d'environnement TEMP. Aucune suggestion? – ModeEngage

+1

C'est dans 'std ::', si c'est ce que vous voulez dire. Vous devez nous faire savoir ce que vous entendez par "ça ne marche pas". Compiler les erreurs? Erreurs d'exécution? Mauvaise sortie? – GManNickG

+0

Excuses. Le problème principal est qu'il refuse d'ouvrir le fichier lorsque je spécifie un chemin absolu incluant une lettre de lecteur. La question originale sera mise à jour sous peu. – ModeEngage

Répondre

23

Votre chemin est invalide:

"C:\temp.txt" 

Le \ est Echapper à la « t » comme un caractère de tabulation horizontale, de sorte que la valeur du chemin se termine comme:

"C: emp.txt" 

Qu'est-ce que vous voulez est:

"C:\\temp.txt" 

ou

"C:/temp.txt" 
+0

J'ai fait cette erreur souvent dans des langages scriptés et il revient et dit le chemin invalide "blah" - avec le caractère échappé disparaissant immédiatement me faisant prendre conscience de l'erreur. – whatnick

+0

C'est le problème. J'essayais d'obtenir la variable d'environnement Windows PATH, qui revenait avec des barres obliques non échappées. Merci! – ModeEngage

6

Le problème est dans votre chaîne, vous n'échappez pas au backslash.

ofstream File("C:\\temp.txt"); 
+3

@Ed: Le fichier n'est pas un pointeur, mais les objets flux dérivés de basic_ios ont un opérateur void *(), qui retourne un pointeur nul si fail() renvoie vrai, sinon un pointeur non nul est retourné. C'est ainsi que 'if (File)' fonctionne. (Mais vous avez raison d'avoir à échapper à la barre oblique inverse.) –

+0

Ahh, ok, merci. J'aurais dû m'en assurer avant de poster. –

4

Même si les gens de Windows semblent préférer le caractère non-standard « \ » comme séparateur de chemin, la norme «/» fonctionne parfaitement et évite les problèmes gênants comme celui-ci.

Donc, mon conseil est de tenir à slashes ...

std::ofstream File("C:/temp.txt"); 
+0

non standard? Je n'étais pas au courant que le séparateur de chemin était standardisé. –

+1

Nommez une plate-forme couramment utilisée aujourd'hui où '/' n'est pas un séparateur de chemin valide. VMS peut-être? –

Questions connexes