web-dev-qa-db-fra.com

Ouvrir le fichier par son chemin complet en C ++

Je veux que l'utilisateur me donne le chemin complet où le fichier existe et pas seulement le nom du fichier. Comment puis-je ouvrir le fichier de cette façon?

Est-ce quelque chose comme ça:

ifstream file;
file.open("C:/Demo.txt", ios::in);

Cela ne semble pas fonctionner.

17
Greg

Normalement, on utilise le caractère barre oblique inverse comme séparateur de chemin dans Windows. Donc:

ifstream file;
file.open("C:\\Demo.txt", ios::in);

Gardez à l'esprit que lorsqu'il est écrit en code source C++, vous devez utiliser la double barre oblique inverse car le caractère barre oblique inverse lui-même signifie quelque chose de spécial à l'intérieur des chaînes entre guillemets doubles. Donc, ce qui précède fait référence au fichier C:\Demo.txt.

18
Greg Hewgill

Vous pouvez utiliser un chemin complet avec les classes fstream. Le code suivant tente d'ouvrir le fichier demo.txt à la racine du lecteur C :. Notez qu'il s'agit d'une opération d'entrée, le fichier doit déjà exister.

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

int main() {
   ifstream ifs( "c:/demo.txt" );       // note no mode needed
   if ( ! ifs.is_open() ) {                 
      cout <<" Failed to open" << endl;
   }
   else {
      cout <<"Opened OK" << endl;
   }
}

Que produit ce code sur votre système?

10
anon

Le code me semble fonctionner. Je pense la même chose avec @Iothar.

Vérifiez si vous incluez les en-têtes requis pour la compilation. S'il est compilé, vérifiez s'il existe un tel fichier, et tout, les noms, etc., correspond, et vérifiez également que vous avez le droit de lire le fichier.

Pour effectuer une vérification croisée, vérifiez si vous pouvez l'ouvrir avec fopen ..

FILE *f = fopen("C:/Demo.txt", "r");
if (f)
  printf("fopen success\n");
2
phoad

Pour ceux qui obtiennent le chemin de manière dynamique ... par exemple glisser-déposer:

Certaines constructions principales obtiennent un fichier glisser-déposer avec des guillemets doubles comme:

"C:\MyPath\MyFile.txt"

Une solution rapide et agréable consiste à utiliser cette fonction pour supprimer les caractères de la chaîne:

void removeCharsFromString( string &str, char* charsToRemove ) {
   for ( unsigned int i = 0; i < strlen(charsToRemove); ++i ) {
      str.erase( remove(str.begin(), str.end(), charsToRemove[i]), str.end() );
   }
} 

string myAbsolutepath; //fill with your absolute path
removeCharsFromString( myAbsolutepath, "\"" );

myAbsolutepath contient maintenant seulement C:\MyPath\MyFile.txt

La fonction a besoin de ces bibliothèques: <iostream><algorithm><cstring>.
La fonction était basée sur cette réponse .

Violon de travail: http://ideone.com/XOROjq

1
jave.web