2009-12-03 7 views
3
#include <iostream> 
#include <fstream> 
#include <cstdlib> 

int main() { 
    std::fstream f1("/tmp/test"); 
    if (!f1) { 
     std::cerr << "f1 failed\n"; 
    } else { 
     std::cerr << "f1 success\n"; 
    } 
    FILE *f2 = fopen("/tmp/test", "w+"); 
    if (!f2) { 
     std::cerr << "f2 failed\n"; 
    } else { 
     std::cerr << "f2 success\n"; 
    } 
} 

La création d'un fichier dans/tmp/ne fonctionne pas avec fstream mais avec fopen. Quel pourrait être le problème? (Je reçois f1 échoué et le succès f2 quand/tmp/test n'existe pas déjà)Comment créer un fichier dans un répertoire différent en C++?

+0

Utilisez tmpnam, tmpfile ou similaire pour les fichiers temporaires. –

Répondre

4

Vous devez dire fstream vous ouvrez le fichier pour la sortie, comme celui-ci

std::fstream fs("/tmp/test", std::ios::out); 

Ou utiliser à la place ofstream de fstream, qui ouvre le fichier pour la sortie par défaut:

std::ofstream fs("/tmp/test"); 
+1

http://www.cplusplus.com/reference/iostream/fstream/fstream/ indique que le constructeur par défaut pour fstream définit déjà ios_base :: out, alors pourquoi ne fonctionne-t-il pas comme écrit à l'origine? – Steven

+0

Je suppose que le simple fstream échoue car il ajoute aussi ios :: in, et le fichier doit exister lors de l'ouverture pour l'entrée. – Thomas

+0

Parce que 'in | out' ne crée pas le fichier s'il n'existe pas. Les valeurs 'in | out | trunc',' out | trunc', 'out | app' et' out' pour openmode le créeront. –

0

Votre premier appel de méthode ne crée pas automatiquement un fichier: voir fstream.

Si vous voulez que votre premier appel de méthode pour créer un fichier, utilisez:

std::fstream f1("/tmp/test", fstream::out); 
0

Je ne sais pas qui est le mode par défaut pour le constructeur de fstream, j'ai essayé avec cela et cela a fonctionné

std::fstream f1("/tmp/test", std::fstream::in | std::fstream::out); 

Il crée un fichier pour l'entrée et la sortie, vous devriez vérifier la documentation fstream here

Questions connexes