C - problème de lecture dans un fichier

Résolu/Fermé
benj2711 Messages postés 14 Date d'inscription vendredi 13 mai 2011 Statut Membre Dernière intervention 24 mai 2011 - Modifié par benj2711 le 13/05/2011 à 13:59
benj2711 Messages postés 14 Date d'inscription vendredi 13 mai 2011 Statut Membre Dernière intervention 24 mai 2011 - 22 mai 2011 à 03:23
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 :

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:

4 réponses

benj2711 Messages postés 14 Date d'inscription vendredi 13 mai 2011 Statut Membre Dernière intervention 24 mai 2011
13 mai 2011 à 11:32
up
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
13 mai 2011 à 11:57
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.
0
benj2711 Messages postés 14 Date d'inscription vendredi 13 mai 2011 Statut Membre Dernière intervention 24 mai 2011
13 mai 2011 à 14:03
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é.
0
benj2711 Messages postés 14 Date d'inscription vendredi 13 mai 2011 Statut Membre Dernière intervention 24 mai 2011
22 mai 2011 à 03:23
problème résolu ! j'avais simplement oublié cette lige avant le première lecture :
SetFilePointer(hFile,0,NULL,FILE_BEGIN);
qui place la tête de lecture au début du fichier.
0