AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

EncodeBase64 Problem mit Filestream

Ein Thema von DelphiUser123 · begonnen am 27. Mai 2023 · letzter Beitrag vom 22. Jun 2023
Antwort Antwort
DelphiUser123

Registriert seit: 23. Feb 2013
23 Beiträge
 
#1

EncodeBase64 Problem mit Filestream

  Alt 27. Mai 2023, 02:26
Hallo zusammen. Ich habe eine Binary Datei deren Daten ich umwandeln möchte in Zahlen. Die Position des Filestreams wird immer um eins größer. Jedoch wird die neue Position nicht von "EncodeBase64" erkannt. Er spuckt stets nur die selbe Zahl aus, der Ausgabestring von "EncodeBase64" ist dementsprechend auch immer gleich.
Vielen Dank für Antworten.
Hier mein Code:
Code:
function GetNewData(): integer;
var

AFileStream : TFileStream; rohwert : AnsiString; pfad,AFilename: string;
begin

pfad:=ExtractFilePath(ParamStr(0));
AFilename:= pfad + 'data.bin';

 AFileStream := TFileStream.Create(AFilename, fmOpenRead);

repeat

try
           AFileStream.Position:=StreamPosition;
           rohwert:=EncodeBase64(AFileStream, 1);
           zufallswert := ord(rohwert[1]);

           StreamPosition:=StreamPosition+1;

           showmessage(inttostr(zufallswert));
           showmessage(inttostr(StreamPosition));
           showmessage(rohwert);
                     
finally
       
        AFileStream.Free;
       
end;
until (1 < zufallswert) and (zufallswert <= 50);  

Result:=zufallswert;

end;
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.680 Beiträge
 
Delphi 5 Professional
 
#2

AW: EncodeBase64 Problem mit Filestream

  Alt 27. Mai 2023, 02:53
EncodeBase64 erwartet einen Pointer auf Daten, keinen Stream. Bei StackOverflow gibt's ein Beispiel, bei dem mit TMemoryStream gearbeitet wird: https://stackoverflow.com/questions/...decode-base-64

Die Freigabe des Streams innerhalb der Schleife solltest du dringend überdenken.

Grüße
Dalai
  Mit Zitat antworten Zitat
Alt 22. Jun 2023, 08:34     Erstellt von dilpot
Dieser Beitrag wurde von TBx gelöscht. - Grund: Verdacht auf SPAM und den damit verbundenen verschwenderischen Umgang von wertvollen Bits und Bytes
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: EncodeBase64 Problem mit Filestream

  Alt 22. Jun 2023, 09:19
Hab mal spaßenshalber ChatGPT befragt und er hat mir damit geantwortet, schaut schlüssig für mich aus.
Code:
function EncodeFileToBase64(const ASourceFile, ATargetFile: string): Boolean;
var
  SourceStream: TFileStream;
  TargetStream: TStringStream;
begin
  Result := False;
  SourceStream := TFileStream.Create(ASourceFile, fmOpenRead or fmShareDenyWrite);
  try
    TargetStream := TStringStream.Create('', TEncoding.ASCII);
    try
      TNetEncoding.Base64.Encode(SourceStream, TargetStream);
      TargetStream.SaveToFile(ATargetFile);
    finally
      TargetStream.Free;
    end;
  finally
    SourceStream.Free;
    Result := True;
  end;
end;

function DecodeFileFromBase64(const ASourceFile, ATargetFile: string): Boolean;
var
  SourceStream: TStringStream;
  TargetStream: TFileStream;
begin
  Result := False;
  SourceStream := TStringStream.Create('', TEncoding.ASCII);
  try
    SourceStream.LoadFromFile(ASourceFile);
    TargetStream := TFileStream.Create(ATargetFile, fmCreate);
    try
      TNetEncoding.Base64.Decode(SourceStream, TargetStream);
    finally
      TargetStream.Free;
    end;
  finally
    SourceStream.Free;
    Result := True;
  end;
end;
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.021 Beiträge
 
Delphi 12 Athens
 
#4

AW: EncodeBase64 Problem mit Filestream

  Alt 22. Jun 2023, 09:47
Warum die unterschiedliche Vorgehensweise bei Encode und Decode (abgesehen von der eigentlich Aktion)?

Beim Lesen aus dem FileStream und anschließenden Schreiben des StringStreams im Encode gibt es Probleme wenn ASourceFile und ATargetFile auf dieselbe Datei verweisen. Beim Decode passiert das nicht. Daher würde ich beim Encode wie beim Decode in einen StringStream lesen und in einen FileStream schreiben.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:51 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