Question

Je suis en train d'ouvrir un fichier qui a normalement contenu, dans le but de tester j'aimerai initialiser le programme sans les fichiers étant disponibles / existants afin alors le programme devrait créer des vides, mais ai des problèmes pour son application. Ceci est mon code à l'origine

void loadFiles() {
fstream city;
    city.open("city.txt", ios::in);
fstream latitude;
    latitude.open("lat.txt", ios::in);
fstream longitude;
    longitude.open("lon.txt", ios::in);
while(!city.eof()){
    city >> cityName;
    latitude >> lat;
    longitude >> lon;
    t.add(cityName, lat, lon);
}
city.close();
latitude.close();
longitude.close();
}

J'ai essayé tout ce que je peux penser, ofstream, ifstream, ajoutant ios::out toutes ses variations. Quelqu'un pourrait me expliquer ce qu'il faut faire pour résoudre le problème. Merci!

Était-ce utile?

La solution

Vous avez le code publié pour la lecture de fichiers, ne pas créer des vides - vous avez besoin d'élargir votre question t que à cet égard. Et ce que vous avez posté n'est pas du bon code pour la lecture. La fonction détecte la fin du fichier (EOF) après une lecture, pas avant un - fondamentalement, vous devez utiliser presque jamais. Au lieu de cela, vous devez tester le succès de chaque lecture:

while( (city >> cityName) && (latitude >> lat) && (longitude >> lon) {
    t.add(cityName, lat, lon);
}

En outre, si vous voulez créer un flux d'entrée, pourquoi ne pas le faire en utilisant explicitement un objet ifstream:

ifstream city( "city.txt" );

Pas besoin de déranger avec des drapeaux ios. Vous devriez vraiment tester si l'ouverture travaillé trop:

if ( ! city.is_open() ) {
   throw "open failed" ;   // or whatever
}

Autres conseils

Tout d'abord, si vous n'êtes pas sûr que les fichiers ne existe -. city ensemble, lat et lon certains paramètres par défaut SANE

Deuxièmement, vous pouvez utiliser directement membre is_open de fstream:

fstream f;
f.open("f.txt", ios::in);
if (f.is_open()) {
    // attempt reading here
} else {
    f.open("f.txt", ios::out | ios::app); // create empty file
}

Si la lecture de fichiers échoue pour une raison quelconque, vous avez encore toutes les variables réglées aux valeurs par défaut.

Utilisez ifstream.fail () pour vérifier si le fichier est ouvert correctement. Il retourne vrai si quelque chose va mal (fichier n'existe pas ou vous n'êtes pas autorisé à lire ou Stg autre je ne connais pas). Alors, quand vous avez échoué pouvez en créer un avec un ofstream.open ().

Si vous voulez (non destructive) créer un fichier s'il n'y en a pas, vous pouvez l'ouvrir en mode append (de ios::app), qui va créer si elle n'existe pas, et laisser intacte si elle Est-ce que.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top