Impossible ouvrir fichier en C

fredsor Messages postés 198 Date d'inscription lundi 24 avril 2006 Statut Membre Dernière intervention 3 avril 2008 - 14 mai 2007 à 12:15
 Loki6 - 16 mai 2007 à 11:15
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

emmatopiak Messages postés 149 Date d'inscription mercredi 28 mars 2007 Statut Membre Dernière intervention 17 mai 2007 2
14 mai 2007 à 13:15
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.
0
fredsor Messages postés 198 Date d'inscription lundi 24 avril 2006 Statut Membre Dernière intervention 3 avril 2008
14 mai 2007 à 14:06
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é...
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
14 mai 2007 à 14:20
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++ (@++)<!--
0
fredsor Messages postés 198 Date d'inscription lundi 24 avril 2006 Statut Membre Dernière intervention 3 avril 2008
14 mai 2007 à 14:27
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
14 mai 2007 à 14:31
Essais de remplacer INVALID_FILE_ATTRIBUTES par ((DWORD)-1)

C++ (@++)<!--
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
14 mai 2007 à 14:39
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++ (@++)<!--
0
fredsor Messages postés 198 Date d'inscription lundi 24 avril 2006 Statut Membre Dernière intervention 3 avril 2008
14 mai 2007 à 14:46
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!
0
emmatopiak Messages postés 149 Date d'inscription mercredi 28 mars 2007 Statut Membre Dernière intervention 17 mai 2007 2
14 mai 2007 à 14:48
RE

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

Une autruche ne se cuit pas aux petits lardons.
0
fredsor Messages postés 198 Date d'inscription lundi 24 avril 2006 Statut Membre Dernière intervention 3 avril 2008
14 mai 2007 à 14:59
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à... :(
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
14 mai 2007 à 15:02
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++ (@++)<!--
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
14 mai 2007 à 15:26
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
0
fredsor Messages postés 198 Date d'inscription lundi 24 avril 2006 Statut Membre Dernière intervention 3 avril 2008
14 mai 2007 à 15:27
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
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
14 mai 2007 à 15:34
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++ (@++)<!--
0
fredsor Messages postés 198 Date d'inscription lundi 24 avril 2006 Statut Membre Dernière intervention 3 avril 2008
14 mai 2007 à 15:38
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
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
14 mai 2007 à 15:44
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++ (@++)<!--
0
fredsor Messages postés 198 Date d'inscription lundi 24 avril 2006 Statut Membre Dernière intervention 3 avril 2008
14 mai 2007 à 15:47
Ok
SAKingdom c'est passé

Il trouve l'erreur numero 3...
Ca te di quelque chose?
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
14 mai 2007 à 15:50
Erreur 3 = ERROR_PATH_NOT_FOUND.
En gros il ne trouve pas ton chemin.

Shell
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
14 mai 2007 à 15:52
ERROR_PATH_NOT_FOUND
The system cannot find the path specified.

C++ (@++)<!--
0
fredsor Messages postés 198 Date d'inscription lundi 24 avril 2006 Statut Membre Dernière intervention 3 avril 2008
14 mai 2007 à 15:55
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...
0
NitRic Messages postés 402 Date d'inscription mardi 1 mai 2001 Statut Membre Dernière intervention 15 août 2011
14 mai 2007 à 16:21
System Error Codes: http://msdn2.microsoft.com/en-us/library/ms681381.aspx

~(.:: NitRic ::.)~
0