MiniApp
Messages postés653Date d'inscriptionlundi 21 juillet 2014StatutMembreDernière intervention22 février 2019
-
Modifié par MiniApp le 17/02/2015 à 10:29
MiniApp
Messages postés653Date d'inscriptionlundi 21 juillet 2014StatutMembreDernière intervention22 février 2019
-
17 févr. 2015 à 17:41
Bonjour
Je demande de l'aide car je n'arrive pas à lire ou écrire dans un fichier via un TBytes. J'ai utilisé des file, des handle et les TFileStream. A chaque fois j'ai un bug. Dans l'utilisation des files j'ai des bugs à l'écriture des fichiers qui marche 1 fois sur 2 (Erreur d'E/S 1784 sur BlockWrite), je croit que c'est les files qui ont le mieux marcher. Les TFileStream lisent (et je croit enregistre) des donnés fausses.
Merci beaucoup si vous résolvez mon problème. Pour compléter les infos :
-> En lecture j'utilise les droits de lecture et partage le fichier en lecture seule.
-> En écriture j'utilise les droits d'écriture et ne partage pas le fichier.
-> Avec l'utilisation des files j'ouvre avec Rewrite quand j'écrit.
Les derniers testent en lecture :
procedure TCustomExtenssibleDynamicPicture.LoadFromFile(FileName:String;ShareMode:Byte=fmShareDenyWrite);
{Charge depuis un fichier
ShareMode indique la méthode de partage du fichier (par défault et conseiller fmShareDenyWrite)}
Var
Txt:TBytes;
FileStream:TFileStream;
begin
if not FileExists(FileName) then
begin
raise ELoadExtenssibleDynamicPicture.Create('L''image EDP n''existe pas');
exit;
end;
if Assigned(FOnLoadProgress) then//événement
FOnLoadProgress(Self,EDPLSSOpenFile,0,0);
FileStream := TFileStream.Create(FileName,fmOpenRead+ShareMode);
SetLength(Txt,FileStream.Size);
FileStream.ReadBuffer(Txt,FileStream.Size);
FileStream.Free;
LoadFromByteArr(Txt);//Traite le fichier
if Assigned(FOnLoadProgress) then//événement
FOnLoadProgress(Self,EDPLSSFinish,0,0);
end;
En écriture :
procedure TCustomExtenssibleDynamicPicture.SaveToFile(FileName:String;ShareMode:Byte=fmShareExclusive);
{Cette méthode permet d'enregistrez l'image dans le fichier spécifié
Le résultat indique si l'opération à réussi
ShareMode indique la méthode de partage du fichier (par défault et conseiller fmShareExclusive)}
Var
RAW:TBytes;
FileStream:TFileStream;
begin
if Assigned(FOnLoadProgress) then//événement
FOnLoadProgress(Self,EDPLSSOpenFile,0,0);
FileClose(FileCreate(FileName));
FileStream := TFileStream.Create(FileName,fmOpenWrite+ShareMode);
RAW := SaveToByteArr;//Renvoie un TBytes
FileStream.Size := Length(RAW);
FileStream.WriteBuffer(RAW,FileStream.Size);
FileStream.Free;
if Assigned(FOnLoadProgress) then//événement
FOnLoadProgress(Self,EDPLSSFinish,0,0);
end;
Merci.
Chercher et essayer : vous trouverez la solution!
Fouiner et regarder partout : vous trouverez la connaissance!!
procedure TCustomExtenssibleDynamicPicture.SaveToFile(FileName:String;ShareMode:Byte=fmShareExclusive); {Cette méthode permet d'enregistrez l'image dans le fichier spécifié Le résultat indique si l'opération à réussi ShareMode indique la méthode de partage du fichier (par défault et conseiller fmShareExclusive)} var RAW:TBytes; FileStream:TFileStream; begin if Assigned(FOnLoadProgress) then//événement FOnLoadProgress(Self,EDPLSSOpenFile,0,0); FileClose(FileCreate(FileName)); FileStream := TFileStream.Create(FileName, fmCreate); try RAW := SaveToByteArr;//Renvoie un TBytes if RAW <> nil then FileStream.WriteBuffer(RAW[0], Length(RAW)); finally FileStream.Free; end; if Assigned(FOnLoadProgress) then//événement FOnLoadProgress(Self,EDPLSSFinish,0,0); end;
Désolée ça ne marche pas :'-(. Le fichier est crée et lu mais est faux.
cs_yanb
Messages postés271Date d'inscriptionlundi 27 octobre 2003StatutMembreDernière intervention 7 juillet 202214
>
MiniApp
Messages postés653Date d'inscriptionlundi 21 juillet 2014StatutMembreDernière intervention22 février 2019 17 févr. 2015 à 14:59
Oui faux c'est à dire ? es-tu sur de ton 'SaveToByteArr' ?
Peut-être faut-il ajouter...blabla....exemple :
... if FileExists(FileName) then begin FileStream := TFileStream.Create(FileName,fmOpenWrite or fmShareMode); FileStream.Seek(0,soFromEnd); end else begin FileStream := TFileStream.Create(FileName,fmCreate); try ... FileStream.Write(RAW[0],Length(RAW)); finally FileStream.Free; end; end; ...
MiniApp
Messages postés653Date d'inscriptionlundi 21 juillet 2014StatutMembreDernière intervention22 février 20195 17 févr. 2015 à 17:41
ALLELUIA !!! Merci beaucoup cs_yanb. J'ai utiliser ton code et il marche ! Je l'ai également légèrement modifier pour être utiliser dans mon code de lecture et il MARCHE !!! Pour le SaveToByteArr il y avait un petit bug mais un autres problème était présent. Désormais je sais lire et écrire un fichier via un TBytes. Je te dit vraiment merci cs_yanb.
Modifié par MiniApp le 17/02/2015 à 14:19
17 févr. 2015 à 14:59
Peut-être faut-il ajouter...blabla....exemple :
Modifié par MiniApp le 17/02/2015 à 15:03