web-dev-qa-db-fra.com

Impossible d'ouvrir un fichier avec fopen ()

J'ai essayé d'ouvrir un fichier et de générer du texte, mais je continue à avoir des erreurs. J'ai donc pensé commencer dès le début et essayer d'ouvrir le fichier. Ceci est mon code:

#include <stdio.h>
#include <stdlib.h>
#define CORRECT_PARAMETERS 3

int main(void)
{
    FILE *file;
    file = fopen("TestFile1.txt", "r");
    if (file == NULL) {
        printf("Error");
    }
    fclose(file);
}

Lorsque je lance le fichier, "Erreur" est imprimé sur la console et le tour est joué. TestFile1.txt se trouve au même emplacement que mon fichier .exe. Comment puis-je réparer ça? 

8
jet

Au lieu de printf("Error");, vous devriez essayer perror("Error"), qui peut indiquer le motif réel de l'échec (comme un problème d'autorisation, un argument invalide, etc.).

21
Kousik Nandy

Comment utilisez-vous le fichier? Est-ce à partir de la ligne de commande ou d'un IDE? Le répertoire dans lequel se trouve votre exécutable n’est pas nécessairement votre répertoire de travail.

Essayez d’utiliser le nom de chemin complet dans la variable fopen et voyez si cela résout le problème. Si tel est le cas, le problème est tel que décrit.

Par exemple:

file = fopen("c:\\MyDirectory\\TestFile1.txt", "r");
file = fopen("/full/path/to/TestFile1.txt", "r");

Ou ouvrez une fenêtre de commande et accédez au répertoire où se trouve votre exécutable, puis exécutez-le manuellement.

En passant, vous pouvez insérer un simple (pour Windows ou Linux/UNIX/BSD/etc respectivement):

system ("cd")
system("pwd")

avant la fopen pour indiquer le répertoire dans lequel vous vous trouvez.

10
paxdiablo

Une petite erreur de vérification va un long chemin - vous pouvez toujours tester la valeur de errno ou appeler perror () ou strerror () pour obtenir plus d'informations sur la raison de l'échec de l'appel de fopen ().

Sinon, les suggestions concernant la vérification du chemin sont probablement correctes… très probablement, vous ne vous trouvez pas dans le répertoire dans lequel vous pensez appartenir à la IDE et vous ne disposez pas des autorisations souhaitées.

5
Rob Pelletier

Eh bien, maintenant que vous savez qu’il ya un problème, la prochaine étape consiste à déterminer quelle est exactement l’erreur, qu’arrive-t-il lorsque vous compilez et exécutez ceci ?:

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

int main(void)
{
    FILE *file;
    file = fopen("TestFile1.txt", "r");
    if (file == NULL) {
      perror("Error");
    } else {
      fclose(file);
    }
}
4
Robert Gamble

Le répertoire de travail de votre exécutable est probablement défini sur autre chose que le répertoire dans lequel il est enregistré. Vérifiez vos paramètres IDE.

3
Mark Rushakoff

Essayez d'utiliser un chemin absolu pour le nom de fichier. Et si vous utilisez Windows, utilisez getlasterror () pour voir le message d'erreur réel.

1
rplusg

Le répertoire du dossier de sortie doit avoir été configuré sur un autre répertoire de IDE. Soit vous pouvez changer cela ou remplacer le nom de fichier par le chemin d'accès complet.

J'espère que cela t'aides.

0
Richie

En plus de ce qui précède, l’affichage de votre répertoire actuel pourrait vous intéresser:

int MAX_PATH_LENGTH = 80;
char* path[MAX_PATH_LENGTH];
getcwd(path, MAX_PATH_LENGTH);
printf("Current Directory = %s", path);

Cela devrait fonctionner sans problème sur une plate-forme gcc/glibc. (Je connais le plus ce type de plate-forme). Il y avait une question posté ici qui parlait de getcwd & Visual Studio si vous êtes sur une plate-forme de type Windows. 

0
Dan