Impossible ouvrir fichier en C

Messages postés
198
Date d'inscription
lundi 24 avril 2006
Statut
Membre
Dernière intervention
3 avril 2008
- - Dernière réponse :  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!
Afficher la suite 

20/27 réponses

Messages postés
149
Date d'inscription
mercredi 28 mars 2007
Statut
Membre
Dernière intervention
17 mai 2007
0
Merci
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.
Commenter la réponse de emmatopiak
Messages postés
198
Date d'inscription
lundi 24 avril 2006
Statut
Membre
Dernière intervention
3 avril 2008
0
Merci
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é...
Commenter la réponse de fredsor
Messages postés
3213
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
0
Merci
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++ (@++)<!--
Commenter la réponse de SAKingdom
Messages postés
198
Date d'inscription
lundi 24 avril 2006
Statut
Membre
Dernière intervention
3 avril 2008
0
Merci
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
Commenter la réponse de fredsor
Messages postés
3213
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
0
Merci
Essais de remplacer INVALID_FILE_ATTRIBUTES par ((DWORD)-1)

C++ (@++)<!--
Commenter la réponse de SAKingdom
Messages postés
3213
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
0
Merci
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++ (@++)<!--
Commenter la réponse de SAKingdom
Messages postés
198
Date d'inscription
lundi 24 avril 2006
Statut
Membre
Dernière intervention
3 avril 2008
0
Merci
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!
Commenter la réponse de fredsor
Messages postés
149
Date d'inscription
mercredi 28 mars 2007
Statut
Membre
Dernière intervention
17 mai 2007
0
Merci
RE

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

Une autruche ne se cuit pas aux petits lardons.
Commenter la réponse de emmatopiak
Messages postés
198
Date d'inscription
lundi 24 avril 2006
Statut
Membre
Dernière intervention
3 avril 2008
0
Merci
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à... :(
Commenter la réponse de fredsor
Messages postés
3213
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
0
Merci
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++ (@++)<!--
Commenter la réponse de SAKingdom
Messages postés
2674
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
0
Merci
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
Commenter la réponse de DeAtHCrAsH
Messages postés
198
Date d'inscription
lundi 24 avril 2006
Statut
Membre
Dernière intervention
3 avril 2008
0
Merci
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
Commenter la réponse de fredsor
Messages postés
3213
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
0
Merci
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++ (@++)<!--
Commenter la réponse de SAKingdom
Messages postés
198
Date d'inscription
lundi 24 avril 2006
Statut
Membre
Dernière intervention
3 avril 2008
0
Merci
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
Commenter la réponse de fredsor
Messages postés
3213
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
0
Merci
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++ (@++)<!--
Commenter la réponse de SAKingdom
Messages postés
198
Date d'inscription
lundi 24 avril 2006
Statut
Membre
Dernière intervention
3 avril 2008
0
Merci
Ok
SAKingdom c'est passé

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

Shell
Commenter la réponse de DeAtHCrAsH
Messages postés
3213
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
0
Merci
ERROR_PATH_NOT_FOUND
The system cannot find the path specified.

C++ (@++)<!--
Commenter la réponse de SAKingdom
Messages postés
198
Date d'inscription
lundi 24 avril 2006
Statut
Membre
Dernière intervention
3 avril 2008
0
Merci
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...
Commenter la réponse de fredsor
Messages postés
409
Date d'inscription
mardi 1 mai 2001
Statut
Membre
Dernière intervention
15 août 2011
0
Merci
System Error Codes: http://msdn2.microsoft.com/en-us/library/ms681381.aspx

~(.:: NitRic ::.)~
Commenter la réponse de NitRic