Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi CodeBase64 wirft Fehler auf - Warum? (https://www.delphipraxis.net/19758-codebase64-wirft-fehler-auf-warum.html)

torud 8. Apr 2004 12:02


CodeBase64 wirft Fehler auf - Warum?
 
Hallo Leute,

ich schreibe mit einer Base64 Routine einen String in eine Datei. Wenn ich diesen dann aber zur Kontrolle auslesen will bekomme ich immer wieder die Meldung, dass das StringFormat unkorrekt ist. Ich lasse mir aber den String vorher anzeigen und kann keinen Fehler festellen.

'1234' ist doch ein gueltiger String, oder?

Hier steigt die Procedure aus:
Wenn ich diesen Bereich aber rausremme, funzt die Ueberpruefung nicht.
Code:
  if (Length(S) mod 4)<> 0 then
    begin
      raise Exception.Create('Base64: Incorrect string format');
    end;
Wer hat eine Idee.

Ich schicke auch gern den gesamten Code, wenns nuetzt.

sakura 8. Apr 2004 12:05

Re: CodeBase64 wirft Fehler auf - Warum?
 
Die Routine überprüft, ob die Länge des Strings ein vielfaches von 4 ist. (also '1234' wäre auch da korrekt). Schau mal in die CodeLib, da habe ich auch eine Lösung gepostet.

...:cat:...

torud 8. Apr 2004 12:14

Re: CodeBase64 wirft Fehler auf - Warum?
 
Hallo Sakura,

vielen Dank fuer die schnelle Hilfe. Leider weiss ich nicht, was Du mit CodeLib meinst. Kannst Du bitte konkreter werden?

sakura 8. Apr 2004 12:16

Re: CodeBase64 wirft Fehler auf - Warum?
 
Zitat:

Zitat von torud
Leider weiss ich nicht, was Du mit CodeLib meinst. Kannst Du bitte konkreter werden?

:oops: Sorry: Die Delphi-PRAXiS Code-Library -> Library: Algorithmen -> Base64 (MIME) En-/Decoding

...:cat:...

torud 8. Apr 2004 15:02

Re: CodeBase64 wirft Fehler auf - Warum?
 
also ich habe mir mal den code kopiert und natuerlich gleich ausprobiert. die fehlermeldung kommt nun nicht mehr, dafuer aber auch kein inhalt.

folgendes tue ich zum Erstellen:
Code:
var
   FileID:TStringlist;
begin
             FileID := TStringList.Create;
             FileID.Text := Base64Encode('1234/abcd');
             ShowMessage(fileid.Text);
             FileID.SaveToFile(App_Path + '\license.id');
end;
und folgendes zum Auslesen
Code:
procedure TForm1.CheckUserID;
var
  FileID:TStringlist;
begin
        if FileExists(App_Path + '\license.id') then
          begin
             FileID := TStringList.Create;
             FileID.LoadFromFile(App_Path + '\license.id');
             ShowMessage((FileID.Text));
             ShowMessage(Base64Decode(FileID.Text));
             if Base64Decode(FileID.Text) = '1234/abcd' then exit
             else
               begin
                 PageControl1.Pages[1].Destroy;
                 PageControl1.Pages[3].Destroy;
               end;
          end
        else
          begin
             PageControl1.Pages[1].Destroy;
             PageControl1.Pages[3].Destroy;
          end;
end;
Die Messagebox mit dem Inhalt der Datei stimmt.
Leider gibt mir die Messagebox mit dem encodeten Inhalt einen Leerstring zurueck.

hm, wo liegt das problem???

sakura 8. Apr 2004 15:19

Re: CodeBase64 wirft Fehler auf - Warum?
 
Eine StringList wird immer durch #13#10 abgeschlossen, egal, wie es gespeichert wurde ;-) Dadurch ist Dein zu dekodierender String inkorrekt. Ändere wie folgend:
Code:
ShowMessage(Base64Decode([color=#f50000]Trim([/color]FileID.Text[color=#f50000])[/color]));
...:cat:...

torud 8. Apr 2004 15:27

Re: CodeBase64 wirft Fehler auf - Warum?
 
Vielen herzlichen Dank!

Es funktioniert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz