Impossible ouvrir fichier en C

Signaler
Messages postés
198
Date d'inscription
lundi 24 avril 2006
Statut
Membre
Dernière intervention
3 avril 2008
-
 Loki6 -
Bonjour,

Je dois développer une appli en C sous eMbedded Visual C++
J'essaye betement d'ouvrir un fichier txt avec la fonction fopen(), mais il passe toujours dans le cas "NULL",  je ne comprends pas, le chemin est bon pourtant, j'ai meme essayé avec des fichiers dans le meme repertoire, je ne comprends pas...

Help s'il vous plait!!
Voici ma fonction, proche de ce qu'on trouve sur le net...

void RecupererFichier()
{
 FILE* fichierEcran;
 if(( fichierEcran = fopen ("C:\\TEMP\\ecran.txt","r")) != NULL)
 {
  MessageBox (NULL, TEXT("Fichier ouvert !"), TEXT("Yep"), MB_OK);
 }
 else
 {
  MessageBox (NULL, TEXT("Echec cuisant"), TEXT("Yep"), MB_OK);
 }
}

Merci d'avance!

27 réponses

Messages postés
149
Date d'inscription
mercredi 28 mars 2007
Statut
Membre
Dernière intervention
17 mai 2007
1
Salut,

il y a trois problemes possibles :
- le fichier est pas dans le repertoire que tu mentionnes
- le nom du repertoire est pas en majuscules
- remplace les \\ par des /
Et  essaye de voir pour ces trois problemes et dis-moi si ca marche

Une autruche ne se cuit pas aux petits lardons.
Messages postés
198
Date d'inscription
lundi 24 avril 2006
Statut
Membre
Dernière intervention
3 avril 2008

Merci de m'avoir répondu emmatopiak

Malheureusement c'est trois solutions ne fonctionnent pas : le fichier est bien présent, le nom du répertoire est bien en majuscule, et en essayant de remplacer les \\ par des /, pas mieux...

Je suis perdu je vois vraimeent pas où j'ai cloché...
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
fopen n'est pas sensible à la case.
\\ équivaut exactement à / donc c'est pas ça.

J'ai essayé ton code et tout fonctionne sans aucun problème.
Si tu es sûr de la présence de ton fichier, essais ceci:

if(GetFileAttributes(TEXT("c:\\temp\\ecran.txt")) == INVALID_FILE_ATTRIBUTES)
    MessageBox(0, TEXT("Fichier inexistant"), 0, MB_ICONHAND);

N'oublie pas le #include <windows.h>, c'est une fonction de l'API win32.

Si le message "Fichier inexistant" apparait, c'est que le fichier n'existe pas, du moins, pas à l'endroit que tu mentionnes.

C++ (@++)<!--
Messages postés
198
Date d'inscription
lundi 24 avril 2006
Statut
Membre
Dernière intervention
3 avril 2008

evc++ n'a pas l'aire de connaitre INVALID_FILE_ATTRIBUTES...
sur certains forum on parle d'inclure winbase.h  mais ca ne l'aide pas chez moi...
 voici mon erreur avec ton code :
 - error C2065: 'INVALID_FILE_ATTRIBUTES' : undeclared identifier
 - warning C4018: '==' : signed/unsigned mismatch
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
Essais de remplacer INVALID_FILE_ATTRIBUTES par ((DWORD)-1)

C++ (@++)<!--
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
Attend un peu. evc++ ça veut dire Visual C++ Express ? Si oui, as tu téléchargé la PSDK ? Sans ça, tu ne peux pas faire grand chose.

Voici, pour t'aider dans l'installation:
http://www.cppfrance.com/code.aspx?ID=38359

C++ (@++)<!--
Messages postés
198
Date d'inscription
lundi 24 avril 2006
Statut
Membre
Dernière intervention
3 avril 2008

Le message "Fichier inexistant" est bien apparu...
Mais pour te montrer que je ne suis pas fou (enfin je n'espere pas ^^), je te montre un imprime ecran de mon explorer!!
Je ne vois pas comment mon fichier ne peut pas etre reconnu!
Messages postés
149
Date d'inscription
mercredi 28 mars 2007
Statut
Membre
Dernière intervention
17 mai 2007
1
RE

As-tu verifie les droits d'acces au fichier ?

Une autruche ne se cuit pas aux petits lardons.
Messages postés
198
Date d'inscription
lundi 24 avril 2006
Statut
Membre
Dernière intervention
3 avril 2008

Non evc++ , c'est eMbedded Visual C++, du visual C++ pour embarqué si tu veux, pocket PC

Sinon mes droits d'acces au fichier me semblent bon, et le dossier aussi ( sous windows je vois pas ce que je pourrais verifier d'autres, si vous connaissez la commande cmd pour m'assurer des droit d'acces...)

Je suis vraiment scotché là... :(
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
Essais ceci:

if(GetFileAttributes(TEXT("c:\\temp\\ecran.txt")) == INVALID_FILE_ATTRIBUTES) {
    char tmp[10];
    itoa(GetLastError(), tmp, 10);
    MessageBoxA(0, tmp, "Erreur no:", 0);
    MessageBox(0, TEXT("Fichier inexistant"), 0, MB_ICONHAND);
 }

et dis moi quel nombre est affiché.

C++ (@++)<!--
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
1
Ton problème doit venir d'autres part (ex : une routine qui accède deja au fichier en mode exclusif, ....) .
Si tu crées ton fichier avec word ou wordpad, pense a bien les fermer avant de tester ton programme.

Shell
Messages postés
198
Date d'inscription
lundi 24 avril 2006
Statut
Membre
Dernière intervention
3 avril 2008

J'ai recopié il ne connait pas "itoa" ( et j'ai remplacé come tout a lheure le INVALID_FILES...)
Je fais une recherche pour voir si je peux aussi remplacer le itoa
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
Essais de remplacer (temporairement) itoa par ça:
sprintf(tmp, "%d", GetLastError());

Pour le fichier ouvert en exclusivité, c'est ce que je crois aussi mais je n'arrive pas à recréé l'erreur.

C++ (@++)<!--
Messages postés
198
Date d'inscription
lundi 24 avril 2006
Statut
Membre
Dernière intervention
3 avril 2008

Houla deux autre erreurs :
 if(GetFileAttributes(TEXT("C:\\TEMP\\ecran.txt")) == ((DWORD)-1)) {
    char tmp[10];
    sprintf(tmp, "%d", GetLastError());
    MessageBoxA(0, tmp, "Erreur no:", 0);
    MessageBox(0, TEXT("Fichier inexistant"), 0, MB_ICONHAND);
 }

 - error LNK2019: unresolved external symbol _MessageBoxA referenced in function "char * * __cdecl RecupererFichier(void)" ([mailto:?RecupererFichier@@YAPAPADXZ ?RecupererFichier@@YAPAPADXZ])
 - emulatorDbg/Projet_LP.exe : fatal error LNK1120: 1 unresolved externals
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
if(GetFileAttributes(TEXT("C:\\TEMP\\ecran.txt")) == ((DWORD)-1)) {
    TCHAR tmp[10];
    swprintf(tmp, TEXT("%d"), GetLastError());
    MessageBox(0, tmp, TEXT("Erreur no:"), 0);
    MessageBox(0, TEXT("Fichier inexistant"), 0, MB_ICONHAND);
 }

Ça dit quoi ça ?

C++ (@++)<!--
Messages postés
198
Date d'inscription
lundi 24 avril 2006
Statut
Membre
Dernière intervention
3 avril 2008

Ok
SAKingdom c'est passé

Il trouve l'erreur numero 3...
Ca te di quelque chose?
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
1
Erreur 3 = ERROR_PATH_NOT_FOUND.
En gros il ne trouve pas ton chemin.

Shell
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
ERROR_PATH_NOT_FOUND
The system cannot find the path specified.

C++ (@++)<!--
Messages postés
198
Date d'inscription
lundi 24 avril 2006
Statut
Membre
Dernière intervention
3 avril 2008

Ok donc j'ai copié le fichier dans le répertoire du prjet et modifié :
if(GetFileAttributes(TEXT("ecran.txt")) == ((DWORD)-1))

enfin bref cette fois j'ai erreur 2, et evidemment toujours pas de fichier ouvert...

Suis-je bien profondément dans le pétrin?
Sinon le fait que j'utilise un émulatuer pour tester l'application n'a aucun lien je pense, mais je préfere prévenir si ca peut etre important...
Messages postés
402
Date d'inscription
mardi 1 mai 2001
Statut
Membre
Dernière intervention
15 août 2011

System Error Codes: http://msdn2.microsoft.com/en-us/library/ms681381.aspx

~(.:: NitRic ::.)~