C - problème de lecture dans un fichier
Résolu
benj2711
Messages postés
16
Statut
Membre
-
benj2711 Messages postés 16 Statut Membre -
benj2711 Messages postés 16 Statut Membre -
Bonjour,
j'ai un problème dans une application client serveur que je dois réaliser pour l'école, quand je veux lire un log dans un fichier il me unesuite de "?" à la place du log et donc impossible de comparer les variables ! :/ voici la partie du code :
en sortie de compilation :
login recu : ben
mdp recu : 123
compare : ben - ??????????????????????????????
compare : ben - ??????????????????????????????
compare : ben - ??????????????????????????????
compare : ben - ??????????????????????????????
compare : ben - ??????????????????????????????
1
00000001
dans le fichier :
ben \0mdp \0ben1 \0mdp1 \0...
j'ai un problème dans une application client serveur que je dois réaliser pour l'école, quand je veux lire un log dans un fichier il me unesuite de "?" à la place du log et donc impossible de comparer les variables ! :/ voici la partie du code :
int InsReste=1;
byte bInsReste;
while(InsReste==1){
if ( recv(NewSocket,(char*)&bInsReste,sizeof(bInsReste),0) == SOCKET_ERROR )
{ WSAErreur("structure non reçu",GetLastError()); getch(); exit(0); }
InsReste=(int)bInsReste;
if(InsReste==1){
printf("inscription : =%s\n",inet_ntoa(sincl.sin_addr));
bool verif=false;
char login[20];
char mdp[20];
byte bLogin[20];
byte bMdp[20];
if ( recv(NewSocket,(char*)&bLogin,sizeof(bLogin),0) == SOCKET_ERROR )
{ WSAErreur("structure non reçue",GetLastError()); getch(); exit(0); }
for(int i =0; i<20; i++) login[i]=(char)bLogin[i];
printf("login recu : %s\n",login);
if ( recv(NewSocket,(char*)&bMdp,sizeof(bMdp),0) == SOCKET_ERROR )
{ WSAErreur("structure non reçue",GetLastError()); getch(); exit(0); }
for(int i =0; i<20; i++) mdp[i]=(char)bMdp[i];
printf("mdp recu : %s\n",mdp);
HANDLE hFile = CreateFile(filename,GENERIC_READ,NULL,(LPSECURITY_ATTRIBUTES) NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL, (HANDLE) NULL);
char tLogin[20];
char tMdp[20];
DWORD dwByRead;
DWORD taille= SetFilePointer(hFile,0,NULL,FILE_END);
int nb_enr = taille/(2*sizeof(login));
int i=0;
while(!verif && i<nb_enr){
ReadFile(hFile,&tLogin,sizeof(tLogin),&dwByRead,NULL);
ReadFile(hFile,&tMdp,sizeof(tMdp),&dwByRead,NULL);
tLogin[19]='\0';
if(!strcmp(login,tLogin)) // problème de comparaison ici..
verif=true;
printf("compare : %s - %s\n",login, tLogin);
i++;
}
CloseHandle(hFile);
if (verif) {;res=0; InsReste=1;}
else{ res=1; InsReste=0;}
//ecriture dans le fichier
if(!verif){
hFile = CreateFile(filename,GENERIC_WRITE|GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,(LPSECURITY_ATTRIBUTES) NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL, (HANDLE) NULL);
SetFilePointer(hFile,0,NULL,FILE_END);
WriteFile(hFile,&login,sizeof(login),&dwByRead,NULL);//écriture fichier
SetFilePointer(hFile,0,NULL,FILE_END);
WriteFile(hFile,&mdp,sizeof(mdp),&dwByRead,NULL);//écriture fichier
CloseHandle(hFile);
}
//------------envoi réponse au client----------------
// 0 si le nom existe déja
// 1 si inscription OK
bRes=(byte)res;
printf("%d\n", res);
printf("%08X\n", (int)bRes);
if ( send(NewSocket,(char*)&bRes,sizeof(bRes),0) == SOCKET_ERROR )
{ WSAErreur("send",GetLastError()); getch(); exit(0); }
}
}
en sortie de compilation :
login recu : ben
mdp recu : 123
compare : ben - ??????????????????????????????
compare : ben - ??????????????????????????????
compare : ben - ??????????????????????????????
compare : ben - ??????????????????????????????
compare : ben - ??????????????????????????????
1
00000001
dans le fichier :
ben \0mdp \0ben1 \0mdp1 \0...
A voir également:
- C - problème de lecture dans un fichier
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
4 réponses
ton code n'est pas indenté (utilise les balises <code >) pas commenté, ça ne donne vraiment pas envie de le lire. Comme il n'y a qu'une partie, impossible de tester.
Ton programme va cherhcher le log sur un PC distant ? Ce n'est pas très clair ce que tu cherches à faire.
Ton programme va cherhcher le log sur un PC distant ? Ce n'est pas très clair ce que tu cherches à faire.
oui c'est sur un ordinateur distant dont le code est du c#.
les sorties de compilation ne sont que des tests pour essayer de comprendre pourquoi il ne lit pas correctement ce qu'il y a dans le fichier. Je me suis un peu renseigné et une piste serait qu'il faut que je lise/écrive dans le fichier en UTF8.
je mets le post à jour dès que j'ai testé.
les sorties de compilation ne sont que des tests pour essayer de comprendre pourquoi il ne lit pas correctement ce qu'il y a dans le fichier. Je me suis un peu renseigné et une piste serait qu'il faut que je lise/écrive dans le fichier en UTF8.
je mets le post à jour dès que j'ai testé.