Probleme irregulier avec FileWrite

Signaler
Messages postés
36
Date d'inscription
jeudi 24 juillet 2003
Statut
Membre
Dernière intervention
12 août 2003
-
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
Mon probleme c'est que , certaine fois,FileWrite ecrit a la place des caracteres seulement des carrés style:

J'ai logué le FileWrite et le CréateFile mais aucun ne me sors une erreur.

De plus j'ai aussi demandé d'afficher le buffer en question mais a chaque fois il me donne les deux premier caractere A@. Je dis biena chaque fois. Pourtant apres c'est des fois remplacé par des carrés dans le fichier.....

Voici mon code:

HANDLE hfl = CreateFile(trame,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
if(hfl==INVALID_HANDLE_VALUE){
__DBG_LOG("Erreur d'ouverture du fichier");
return NULL;
}
DWORD dWrited;
int erreur=WriteFile(hfl, iLink->tRecvImageBuffers->pImage, iLink->tRecvImageBuffers->nSize, &dWrited, NULL);
if(erreur==0){
DWORD error=GetLastError();
__DBG_LOG("erreur:%s",error);
}
CloseHandle(hfl);


Ce que je bne comprend pas c'est que ca a l'air vraiment aléatoire.....

12 réponses

Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
26
Tu sais, il faudrait un peu plus de ton prog pour trouver l'erreur.
Rassure toi api win32 n'a RIEN d'aleatoire, va tip top.
BruNews, ciao...
Messages postés
36
Date d'inscription
jeudi 24 juillet 2003
Statut
Membre
Dernière intervention
12 août 2003

Un peu plus de prog. sans probleme j'en est plein :-p

void *ImageLink::imageRecvThread(void *pParam)
{
ImageLink *iLink = (ImageLink*)pParam;
int nIndex = 0;
int nSizeRecv = 0;
unsigned int nPacketCounter = 0;
int i=0;
char File[256];
struct tm *stime_dir;
char trame[150];
//********Creation Arborescence******
CreateDirectory("film",NULL);
time(&time_dir);
stime_dir = localtime(&time_dir);
sprintf(File,"film\\film_%02d-%02d_%02dH%02d", stime_dir->tm_mday, stime_dir->tm_mon+1, stime_dir->tm_hour, stime_dir->tm_min);
int existe=CreateDirectory(File,NULL);
if(existe==0){
__DBG_LOG("Attention veillez a ne pas declenché deux connection dans la même minute");
return NULL;
}
//Création du fichier de lancement de la video
sprintf(trame,"%s\\image_ID_",File);
FILE *fp1=fopen(trame,"wb+");
fclose(fp1);
__DBG_LOG("Creation Arborescence et fichier de lancement");
//*********Reception Image*********
..............(Cette partie n'est pas de moi mais a toujours tres bien marché, quoi que je fasse)).......
//*****fin de reception image********
if (iLink->bImageComplete)
{
while ((iLink->processRecvImage() == ILINK_ERR_TIMEOUT) && !iLink->bRecvStopRequest);
if (iLink->bRecvStopRequest)
break;
iLink->flushOldPackets();
int i=iLink->nRecvImageID;

//Création des fichiers contenant les buffer d'images
sprintf(trame,"%s\\image_ID_%i",File,i);

/****la a chaque fois il m'affiche A@****
__DBG_LOG("%s",iLink->tRecvImageBuffers->pImage);

//******Ecriture des donnees dans le fichier****
HANDLE hfl = CreateFile(trame,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
if(hfl==INVALID_HANDLE_VALUE){
__DBG_LOG("Erreur d'ouverture du fichier");
return NULL;
}
DWORD dWrited;
int erreur=WriteFile(hfl, iLink->tRecvImageBuffers->pImage, iLink->tRecvImageBuffers->nSize, &dWrited, NULL);
if(erreur==0){
DWORD error=GetLastError();
__DBG_LOG("erreur:%s",error);
}
CloseHandle(hfl);
__DBG_LOG("ImageLink::imageRecvThread: New image is #%d", iLink->nRecvImageID);
}
Messages postés
36
Date d'inscription
jeudi 24 juillet 2003
Statut
Membre
Dernière intervention
12 août 2003

J'ai oublié de preciser que toute les variables non declaré le son en global ou dans le .h

Bone chance ;)
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
26
Bon alors faudrait nettoyer tout cela en 1er. On fait du win32 ou autre chose mais pas de mixte.
Tu vires <time.h> struct tm et tous ces machins, utilise GetLocalTime(...) etc.
sprintf(File,"film... aura son remplaçant win32 aussi, si tu ne trouves pas je te fournirai.
FILE *fp1=fopen... nenni, CreateFile, tout flux est obsolete sur win32.
En avant, avec du code propre on pourra finaliser correctement.
BruNews, ciao...
Messages postés
36
Date d'inscription
jeudi 24 juillet 2003
Statut
Membre
Dernière intervention
12 août 2003

Je pense avoir fait le tri si ce n'est que dans les bibliotheque de fonction Win32 j'ai trouver wsprintf pour remplacer sprintf et que je trouve ca louche.
L'érreur est toujours la même mais le code ressemble maintenant a:

ImageLink *iLink = (ImageLink*)pParam;
int nIndex = 0;
int nSizeRecv = 0;
unsigned int nPacketCounter = 0;
int i=0;
char File[256];
char trame[150];

//********Creation Arborescence******
//***recuperation heure***
CreateDirectory("film",NULL);
SYSTEMTIME SystemTime;
GetLocalTime(&SystemTime);
wsprintf(File,"film\\film_%02d-%02d_%02dH%02d", SystemTime.wDay, SystemTime.wMonth, SystemTime.wHour, SystemTime.wMinute);
//****creation******
int existe=CreateDirectory(File,NULL);
if(existe==0){
__DBG_LOG("Attention veillez a ne pas declenché eux connection dans la même minute");
return NULL;
}
//****fichier lancement video**
wsprintf(trame,"%s\\image_ID_",File);
HANDLE hfl = CreateFile(trame,GENERIC_WRITE,0,NULL,CREATE_NEW,FILE_ATTRIBUTE_READONLY,NULL);
if(hfl==INVALID_HANDLE_VALUE){
__DBG_LOG("Erreur d'ouverture du fichier");
return NULL;
}
CloseHandle(hfl);
__DBG_LOG("Creation Arborescence et fichier de lancement");

//*********Reception Image*********
...............................................
//********fin reception*********

if (iLink->bImageComplete)
{
while ((iLink->processRecvImage() == ILINK_ERR_TIMEOUT) && !iLink->bRecvStopRequest);
if (iLink->bRecvStopRequest)
break;
iLink->flushOldPackets();
int i=iLink->nRecvImageID;

//Création des fichiers contenant les buffer d'images
wsprintf(trame,"%s\\image_ID_%i",File,i);
__DBG_LOG("%s",iLink->tRecvImageBuffers->pImage);
//******Ecriture des donnees dans le fichier****
HANDLE hfl2 = CreateFile(trame,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
if(hfl2==INVALID_HANDLE_VALUE){
__DBG_LOG("Erreur d'ouverture du fichier");
return NULL;
}
DWORD dWrited;
int erreur=WriteFile(hfl2, iLink->tRecvImageBuffers->pImage, iLink->tRecvImageBuffers->nSize, &dWrited, NULL);
if(erreur==0){
DWORD error=GetLastError();
__DBG_LOG("erreur:%s",error);
}
CloseHandle(hfl2);
__DBG_LOG("ImageLink::imageRecvThread: New image is #%d", iLink->nRecvImageID);
}


C'est un peu mieux :shy)
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
26
bon c'est mieux, wsprintf ne vaut guere mieux(tres lent) que sprintf mais on reglera son sort ensuite.
Pour ecriture comme pour lecture:
int erreur=WriteFile(...
erreur est inutile, suffit de:
dWrited = 0; // voila qui dira vraiment si erreur
WriteFile(hfl2, iLink->tRecvImageBuffers->pImage, iLink->tRecvImageBuffers->nSize, &dWrited, NULL);
if(dWrited != tRecvImageBuffers->nSize) Y A ERREUR !

Voila recompose deja pour les 2 fois ainsi et teste si erreurs.
BruNews, ciao...
Messages postés
36
Date d'inscription
jeudi 24 juillet 2003
Statut
Membre
Dernière intervention
12 août 2003

Je viens d'essayer en mettant:
if(dWrited != iLink->tRecvImageBuffers->nSize)
et cela ne m'a pas sortis d'erreur.....Par contre tu m'as dit: "2 fois" or je n'ai qu'un FileWrite.
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
26
bah, me semblait qu'on avait parle de 2 ecritures... pas grave, je fatigue, vivement dimanche que je parte.
Alors si pas d'erreur va tout bon !!!
Quel est ton prob a ce point ?
BruNews, ciao...
Messages postés
36
Date d'inscription
jeudi 24 juillet 2003
Statut
Membre
Dernière intervention
12 août 2003

Et ben que les données ecrites sont parfois remplacé par des carrés....(PS:effectivement il y avait bien un deuxieme FileWrite mais j'ai laissé topber pour essayé de trouver pkoi j'avais des carrés)
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
26
Mais quels carres, c'est de la donnee binaire ou non ton buffer ? si oui cela ne doit pas etre edite, y a rien a voir, faut relire et traiter comme tel.
BruNews, ciao...
Messages postés
36
Date d'inscription
jeudi 24 juillet 2003
Statut
Membre
Dernière intervention
12 août 2003

Le probleme c'est que même quand je lui demande de m'écrire des entiers dans le fichier, des fois il les remplace par des carrés enfin te prend pas trop la tete, la je pars en WE et je verrais ca mardi.
Merci encore pour ton aide.
Tchao
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
26
Mais un entier est AUSSI sous forme binaire sur 4 octets.
BruNews, ciao...