Fonction qui retourne une autre valeur !!

Messages postés
97
Date d'inscription
vendredi 19 octobre 2007
Statut
Membre
Dernière intervention
18 décembre 2013
- - Dernière réponse : grandyaka54
Messages postés
97
Date d'inscription
vendredi 19 octobre 2007
Statut
Membre
Dernière intervention
18 décembre 2013
- 9 févr. 2012 à 08:42
Bonjour à tous,

J'ai un problème sur lequel je ne m'explique pas. Ma fonction Crypt(Maintenant, '.cry'); que j'utilise dans la fonction btnCryptageClick() me retourne une valeur différente.

Je m'explique, la variable Resultat n'a pas la même valeur que le Result de ma fonction. Sauf quand Result =: 0;

En ce moment je test le cas où le fichier crypté n'est pas créé (suite à un dossier où on n'a pas le droit d'écriture par exemple).
Result me retourne bien la valeur 11 or quand on lit le contenu de la variable Resultat, j'ai la valeur 1305132 !!!!

Que peut-il bien se passer ?


//>>*********** Clic sur le bouton de cryptage *****************************
procedure TfrmVisufichierSecu.btnCryptageClick(Sender: TObject);
var
  Maintenant : String;
  Resultat   : Byte;
begin

  Screen.Cursor := crHourGlass;
  Maintenant := (FormatDateTime('yymmdd_hhnnss_',Now));

  Resultat := Crypt(Maintenant, '.cry');
  
  if (Resultat = 0) then //Pas d'erreur 
  begin
  
    with dmData.ibqrGet do
    begin
      SQL.Clear;
      SQL.Add('INSERT INTO FichierSecu(Chemin, NomCourt, ...)');
      SQL.Add('VALUES (:Chemin, :NomCourt, ...)');
      ...
          
      Params.ParamByName('Chemin').AsString      := ficChemin;                        //Chemin du fichier crypté.
      Params.ParamByName('NomCourt').AsString    := Maintenant + NomCourt + '.cry';   //Nom du fichier crypté.
      ....
      Params.ParamByName('NomCpt').AsString           := NomCompte;                   //Nom du compte de la remise
      ....

      ExecSQL;
         
    end;//with 
           
    if dmData.TransacEspBq.Active
    then dmData.TransacEspBq.Commit;  
  
  end
  //Des erreurs
  else begin
  
    if (Resultat = 1) then
    begin
      MessageBox(Self.Handle,PChar('Les infos n''ont pas pu être cryptées correctement.'+#13
      +'Le répertoire est peut être en lecture seule.'+#13+#13
      +'Contacter le service d''assistance !'),
      PChar('Anomalie !'),mb_OK+MB_ICONWARNING+MB_APPLMODAL);
    end
    else begin  
  
      if (Resultat = 11) then
      begin
        MessageBox(Self.Handle,PChar('Le fichier contenant les infos cryptées n''a pas pu été créé.'+#13+#13
        +'Le répertoire est peut être en lecture seule.'+#13+#13
        +'Contacter le service d''assistance !'),
        PChar('Anomalie !'),mb_OK+MB_ICONWARNING+MB_APPLMODAL);
      end
      else begin
    
        //Resultat = 100
        MessageBox(Self.Handle,PChar('Le fichier d''origine n''a pu être supprimé !!!'+#13+#13
        +'Il continura d''apparaitre dans la liste précédente.'+#13+#13
        +'Contacter le service d''assistance !'),
        PChar('Suppression fichier : Echec !'),mb_OK+MB_ICONWARNING+MB_APPLMODAL);    
  
      end;//if (Resultat = 11)
  
    end;//if (Resultat = 1)
  
  end;//if (Resultat = 0)

  Screen.Cursor := crDefault;

end;


//>>********** Cryptage du fichier *****************************
function TfrmVisufichierSecu.Crypt(Maintenant: String; Ext: String): Byte;  //Integer;  //Byte;
var
  Buffer    : Array[0..1023] of byte;
  BytesRead : Integer;
  INStrm    : TFilestream;
  OUTStrm   : TFilestream;
Begin

  Result := 0;

  try
    INStrm := Tfilestream.Create(ficChemin + NomCourt,fmOpenRead OR fmShareExclusive);
  except
    DeleteFile(ficChemin + Maintenant + NomCourt + Ext);
    Result := 1;
    exit;
  end;

  Try

    try
      Outstrm := Tfilestream.Create(ficChemin + Maintenant + NomCourt + Ext,fmCreate OR fmShareExclusive);
      AES.InitStr(VirSEcuCLEF_AES,TDCP_sha256);
      inStrm.Position := 0;
      while (inStrm.Position <> instrm.size) do
      begin
        BytesRead := inStrm.Read(Buffer, 1024);
        AES.EncryptCBC(Buffer, Buffer, BytesRead);
        Outstrm.write(Buffer, BytesRead);
      end;
    except
      DeleteFile(ficChemin + Maintenant + NomCourt + Ext);
      Result := 1;
    end;

    //Avant de supprimer le fichier de départ,
    //On contrôle si le fichier crypter est bien présent ou pas
    if (instrm.Size <> -1) then instrm.Free;
    if (outstrm.Size <> -1) then outstrm.Free ;

    if not FileExists(ficChemin + Maintenant + NomCourt + Ext) then
    begin
      Result := 11;  //Signifie que le fichier crypté n'existe pas
    end;
    //////

    //SUPPRESSION du fichier de départ.
    Try
      If (Result = 0) then  //Pas d'erreur d'écriture du nouveau fichier.
      begin
        If FileExists(ficChemin + NomCourt)
        Then Begin
          if (instrm.Size <> -1) then instrm.Free;
          if (outstrm.Size <> -1) then outstrm.Free ;
          If (DeleteFile(ficChemin + NomCourt) <> True) //Test est à TRUE si le delete du fichier a bien été fait.
          Then Begin
            DeleteFile(ficChemin + Maintenant + NomCourt + Ext);
            Exit;
          end;
          //Si la suppression n'a pas bien été effectuée, on met Result à 100.
          If FileExists(ficChemin + NomCourt)
          Then Result := 100;  //Signifie que ça ne s'est pas bien passé.
        end;
      end; //If result
    Except;
    End;

  Finally
    if (instrm.Size <> -1) then instrm.Free;
    if (outstrm.Size <> -1) then outstrm.Free;
  End;

end;


Merci de m'éclairer.

Cordialement.
Afficher la suite 

2 réponses

Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
9
0
Merci
en mettant un point d'arrêt sur :

if (Resultat = 0) then //Pas d'erreur

tu trouves

1305132 comme valeur de Resultat

dans

Resultat := Crypt(Maintenant, '.cry');

?

cantador
Commenter la réponse de cs_cantador
Messages postés
97
Date d'inscription
vendredi 19 octobre 2007
Statut
Membre
Dernière intervention
18 décembre 2013
4
0
Merci
Bonjour Cantador,

Effectivement, si je mets un point d'arrêt sur la fonction

if (Resultat = 0) then

Je trouve 144 si la fonction retourne un Byte ou 1305132 si la fonction retourne un integer comme valeur.

dans

Resultat := Crypt(Maintenant, '.cry');

Or dans la fonction Crypt(Maintenant, '.cry');, si j'enlève ce code

    
    //Avant de supprimer le fichier de départ,
    //On contrôle si le fichier crypter est bien présent ou pas
    if (instrm.Size <> -1) then instrm.Free;
    if (outstrm.Size <> -1) then outstrm.Free ;


pour contrôler la présence du fichier

    
    if not FileExists(ficChemin + Maintenant + NomCourt + Ext) then
    begin
      Result := 11;  //Signifie que le fichier crypté n'existe pas
    end;


La fonction me retourne bien la valeur 11 attendue. (Je supprime manuellement le fichier pour tester la fonction FileExists).

GrandYaka54
Commenter la réponse de grandyaka54