Probleme irregulier avec FileWrite

poseidon2 Messages postés 36 Date d'inscription jeudi 24 juillet 2003 Statut Membre Dernière intervention 12 août 2003 - 8 août 2003 à 09:40
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 8 août 2003 à 16:01
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

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
8 août 2003 à 10:45
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...
0
poseidon2 Messages postés 36 Date d'inscription jeudi 24 juillet 2003 Statut Membre Dernière intervention 12 août 2003
8 août 2003 à 11:07
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);
}
0
poseidon2 Messages postés 36 Date d'inscription jeudi 24 juillet 2003 Statut Membre Dernière intervention 12 août 2003
8 août 2003 à 11:09
J'ai oublié de preciser que toute les variables non declaré le son en global ou dans le .h

Bone chance ;)
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
8 août 2003 à 11:27
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...
0

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

Posez votre question
poseidon2 Messages postés 36 Date d'inscription jeudi 24 juillet 2003 Statut Membre Dernière intervention 12 août 2003
8 août 2003 à 14:46
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)
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
8 août 2003 à 15:05
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...
0
poseidon2 Messages postés 36 Date d'inscription jeudi 24 juillet 2003 Statut Membre Dernière intervention 12 août 2003
8 août 2003 à 15:34
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.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
8 août 2003 à 15:38
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...
0
poseidon2 Messages postés 36 Date d'inscription jeudi 24 juillet 2003 Statut Membre Dernière intervention 12 août 2003
8 août 2003 à 15:40
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)
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
8 août 2003 à 15:44
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...
0
poseidon2 Messages postés 36 Date d'inscription jeudi 24 juillet 2003 Statut Membre Dernière intervention 12 août 2003
8 août 2003 à 15:57
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
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
8 août 2003 à 16:01
Mais un entier est AUSSI sous forme binaire sur 4 octets.
BruNews, ciao...
0
Rejoignez-nous