web-dev-qa-db-fra.com

Ouvrir le fichier avec fopen, chemin absolu sous Windows

J'essaye de faire un programme qui compte le nombre de lignes d'un fichier, quand j'essaye de passer le chemin absolu à la fonction fopen, c'est simplement que ça ne se trouve pas, voici mon code

#include <iostream>
#include <stdio.h>
#include <stdlib.h>

using namespace std;

int main(int argc, char *argv[])
{
    int i=0;
    char array[100];

        char caracteres[100];
        FILE *archivo;
        archivo = fopen("C:\Documents and Settings\juegos psps.txt","r");
        if (archivo == NULL){cout<<"Dont Work";}
        while (feof(archivo) == 0)
        {
                fgets(caracteres,100,archivo);
                i++;
                }
                cout << "Number of lines:" << i ;
                return 0;
}

Comment devrais-je passer le chemin absolu à mon programme afin que vous puissiez ouvrir le fichier?

13
franvergara66

Utilisez des doubles barres obliques:

"C:\\Documents and Settings\\juegos psps.txt"
17
SingerOfTheFall

Cela ne fonctionne pas car le compilateur examine une barre oblique inversée dans une chaîne littérale avec le caractère suivant et les interprète généralement comme un seul caractère. Ces séquences à deux caractères dans les littéraux de chaîne sont appelées séquences d'échappement .

Les séquences \D et \j ne correspondent à rien (par opposition à \n qui correspond au caractère de nouvelle ligne), et dans ce cas, la norme indique que le compilateur peut les interpréter à sa guise. Certains compilateurs choisissent d'ignorer la barre oblique inverse, ce qui, dans votre cas, donnerait l'équivalent:

archivo = fopen("C:Documents and Settingsjuegos psps.txt","r");

(Vous pouvez essayer de créer un fichier portant ce nom pour vérifier si c'est ce que fait votre compilateur).

La séquence d'échappement correcte pour une barre oblique inversée est une double barre oblique inversée; vous devez donc l'écrire comme suit:

archivo = fopen("C:\\Documents and Settings\\juegos psps.txt","r");
6
Jon

fonctionne aussi sous windows et linux: / au lieu d'échapper des barres obliques inverses \\

"C:/dir1/dir2/file.ext"
2
Preexo

Vérifiez les espaces dans le nom du fichier. Les barres obliques ont été correctement échappées, mais pas l'espace vide.

Essayer:

fopen("C:\\\\Documents\ and\ Settings\\\juegos psps.txt","r")

1
Greg S

créer un nouveau dossier dans le dossier des blocs de code 

dans le dossier du projet à côté du fichier principal et du fichier d’en-tête, créez le nouveau fichier "exemple1" et mettez-y votre fichier "fichier.txt", puis 

string nom_fichier;
nom_fichier = "exemple1/file.txt" ;
fichier = fopen(nom_fichier.c_str(), "r+");
0
Athimni Iheb