2010-05-24 6 views
7

Est-il possible d'ouvrir un fstream sur un fichier qui n'existe pas avec les deux ios :: in & ios :: out sans erreur?fstream in et out sur fichier inexistant

+5

N'oubliez pas d'accepter les réponses, ou aidez les répondeurs en leur faisant savoir si vous avez essayé leurs solutions (ou remplissez-les avec plus de détails afin qu'ils puissent adapter leurs réponses.) –

Répondre

0
#include <iostream> 
#include <fstream> 
using namespace std; 

int main() { 
    fstream f("test.txt", fstream::in | fstream::out); 
    cout << f.fail() << endl; 
    f << "hello" << endl; 
    f.close();  
    return 0; 
} 

Ce code imprimera 1 et de créer le fichier « test.txt », si elle ne sort pas. Il n'est donc pas possible d'ouvrir et de fstream sur un fichier qui n'existe pas sans avoir d'erreur.

+0

Voulez vous dire "filestr.fail () "et" filestr << << bonjour >><< endl; " – Secko

+0

@Secko Oui, merci. –

2
#include <fstream> 

ofstream out("test", ios::out); 
if(!out) 
{ 
    cout << "Error opening file.\n"; 
    return 1; 
} 

ifstream in("test", ios::in); 
if(!in) 
{ 
    cout << "Error opening file.\n"; 
    return 1; 
} 

En cas d'erreur, le message est affiché et un (1) est renvoyé. Cependant, il est possible de compiler et d'exécuter seulement ofstream out("test", ios::out); et ifstream in("test", ios::in); sans aucune erreur. Dans tous les cas, le fichier test est créé.

8

Mise à jour: Pour ouvrir un fstream sur un fichier qui n'existe pas pour l'entrée et la sortie (accès aléatoire) sans obtenir une erreur, vous devez fournir fstream::in | fstream::out | fstream::trunc dans le open (ou constructeur) appel. Comme le fichier n'existe pas déjà, tronquer le fichier à zéro octet n'est pas un drame.

Vous serait une erreur voulez lors de l'ouverture d'un fichier qui n'existe pas lors de la spécification neios::in puisque vous ne serez jamais capable de lire à partir du flux il est donc préférable d'échouer tôt.

+1

Alors pourquoi ne pas ouvrir un fichier qui n'existe pas à travers un objet de classe fstream jeter une erreur? Exemple: fstream myfile; myfile.open ("this_file_doesn't_exist.txt"); // Cela ne génère aucune erreur. – Ketcomp

0
std::fstream f("test.txt", std::ios_base::out); 
f.close(); //file now exists always 
f.open("test.txt", fstream::in | std::ios_base::out); 
//f is open for read and write without error 

Je n'ai pas vérifié pour garantir qu'il s'ouvrira sans erreur, mais je me sens assez confiant qu'il devrait.