ifstream::ouvrez pas de travail dans Visual Studio en mode debug
J'ai été partout dans le ifstream questions ici et je suis toujours avoir des problèmes de lecture d'un simple fichier texte. Je travaille avec Visual Studio 2008.
Voici mon code:
//CPPFileIO.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <fstream>
#include <conio.h>
#include <iostream>
#include <string>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
ifstream infile;
infile.open("input.txt", ifstream::in);
if (infile.is_open())
{
while (infile.good())
cout << (char) infile.get();
}
else
{
cout << "Unable to open file.";
}
infile.close();
_getch();
return 0;
}
J'ai confirmé que le input.txt fichier dans le bon répertoire de "travail" en vérifiant la valeur de argv[0]
. La méthode Ouverte juste ne fonctionnera pas.
Je suis aussi de la difficulté de débogage - ne dois-je pas être en mesure de définir une veille sur infile.good()
ou infile.is_open()
? Je reçois
Error: member function not present.
EDIT: mise à Jour de la liste de code avec le code complet de .Fichier CPP.
Mise à JOUR: Le fichier n'était PAS dans le Répertoire de Travail Courant. C'est le répertoire où le fichier de projet est situé. Déménagé là-bas et elle fonctionne lorsque le débogage VS.NET.
Merci pour l'affichage de la mise à jour de la section. Il avait été une minute depuis que j'avais besoin de réfléchir à l'endroit où le répertoire de travail est en mode de débogage. M'a sauvé quelques minutes de casse-tête.
OriginalL'auteur Dave Swersky | 2009-04-28
Vous devez vous connecter pour publier un commentaire.
Essayez d'utiliser l'opérateur de bits or lors de la spécification du mode d'ouverture.
La openmode paramètre est un masque de bits.
ios::ate
est utilisé pour ouvrir le fichier pour l'ajout, etios::in
est utilisé pour ouvrir le fichier pour la lecture d'entrée.Si vous voulez juste pour lire le fichier, vous pouvez probablement utiliser simplement:
Par défaut en mode ouvert pour un ifstream est ios::in, de sorte que vous pouvez vous débarrasser de cette complètement maintenant. Le code suivant fonctionne pour moi à l'aide de g++.
Toujours pas de chance 🙁 j'ai remarqué que j'avais la "infile" comme une "fstream" au lieu de "ifstream". J'ai enlevé le ios:ate. La méthode ouverte ne fonctionne toujours pas.
Bizarre! Il ne fonctionne pas quand je debug, mais il fonctionne parfaitement quand je lance le debug .exe à partir d'une ligne de commande! Des idées pourquoi?
Plus intéressant: Quand j'ouvre le "Visual Studio 2008 Invite de Commande" et de l'exécuter à partir de là, j'obtiens l'erreur. Il fonctionne quand j'utilise l'invite de commande de Windows...
EU: j'ai dû utiliser la _getcwd() fonction permettant d'obtenir le Répertoire de Travail Actuel, qui a été le fichier de projet répertoire, PAS de la solution ou Debug. Étrangement, aucun montant de coder en dur le chemin de travail lors du débogage. Merci pour votre aide!
OriginalL'auteur Bill the Lizard
Parfois Visual Studio met à votre fichier exe loin de votre code source. Par défaut, VS ne peut chercher le fichier à partir de votre fichier exe. Ce processus est une simple étape pour arriver à l'entrée d'un fichier txt dans le même répertoire que votre code source. Si vous ne souhaitez pas fixer votre IDE de l'installation.
J'espère que cela aide d'autres personnes pour une solution rapide. Il m'a fallu du temps pour trouver cette installation moi-même.
OriginalL'auteur Dustin Taylor
J'ai trouvé deux problèmes dans votre code:
a) erreur de syntaxe dans "ios::ate || ios::in" => doit être "ios::ate | ios::in"
b) "ios::ate" place le curseur à la fin du fichier - si vous n'obtenez rien lorsque vous démarrez la lecture
Il suffit donc de retirer "ios::ate" et vous êtes très bien 🙂
ciao,
Chris
OriginalL'auteur 3DH
||
est l'opérateur logique ou, pas l'opérateur au niveau du bit (comme la Loi Le Lizzard a dit).donc je suppose que vous êtes fait l'équivalent de:
(en supposant que ni ios::ate ou ios::0)
OriginalL'auteur Tom
Essayez d'utiliser:
et le bon comprend:
etc.
Vous avez besoin de nous montrer le dossier complet afin de fixer votre deuxième problème. BTW, avez-vous été capable de lire dans le fichier?
Mise à jour avec plein de code.
Changement ifstream::ios::in. Pourquoi avez-vous besoin de conio.h ou _getch? Ce sont des non-standard. Avez-vous des VS2008 SP1 est installé?
J'ai ajouté conio.h et _getch juste pour être en mesure de briser l'exécution et d'attendre une frappe de touche avant que le programme se termine. Pensez-vous que cela pourrait poser problème? Je vais essayer de les retirer.
OriginalL'auteur dirkgently