AGB  ·  Datenschutz  ·  Impressum  







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

Base64/ Mime für Dateien

Ein Thema von Capstone · begonnen am 13. Sep 2017 · letzter Beitrag vom 17. Sep 2017
 
Benutzerbild von Capstone
Capstone

Registriert seit: 15. Jul 2013
Ort: NRW
23 Beiträge
 
Delphi 3 Professional
 
#1

Base64/ Mime für Dateien

  Alt 13. Sep 2017, 11:02
Delphi-Version: 5
So, 2 Dinge brauche ich:
Datei -> base64-String
Datei -> base64-Datei
und zurück.

Wie kann man Dateien am sinnvollsten/schnellsten/besten [Stream/sonstwie] mime codieren:

Ich möchte eine große (ca.80 MB) Datei gerne in base64 sichern/umwandeln. Unüblich ich weiß. Doch das dauerte mit diversen anderen units, die ich über die Jahre mal gefunden habe sonst teilweise für 1 MB StringDaten schon extrem lange.

Erst hatte ich mit der DEC 5.2 Funktion herumgespielt, weil ich gesehn hatte, daß Hagen die Funktion dort auch eingebaut hat. Allerdings, wie mir scheint eher nur für Strings (z.B. den Salt; evtl. auch für den Cryptotext). Oder?

Ich hab dann nochmal gesucht und die Unit von Sakura (wieder)gefunden.
http://www.delphipraxis.net/991-base...-decoding.html
Diese oder eine ähliche hab ich vor Jahren schon mal abgespeichert und in einem älteren Projekt eingebunden, fand aber später mal in meinen Projekten, daß die in DEC eingebaute Routine[mime?] für einige tausend/Mio Bytes irgendwie schneller war.

So, nun wollte ich dennoch diese auch verwenden, weil die mit Streams zurechtzukommen scheint, hab aber generelle Probleme damit/ u.mit Streams. (bin auch noch "neu" mit Delphi/pascal)

Streams - dazu hab ich mir mittlerweile was durchgelesen - aber ich kann doch eigentlich nicht in BufferTeilen in eine Base64 Procedur reinschieben - das gibt doch sicher total andere Eegebnisse, als von einem kontinuierlichen Strom? Dann hätte ich ja unterbrochene, einzeln b64 codierte Stringabschnitte.

Wie mach ich das am besten?

"Datei als base64-String" wäre evtl. auch noch gut, für kleinere Dateien.
müßte doch auch gehen?


Delphi-Quellcode:
var
OUTStrom, strm : TFileStream;
FN: String;
  Buffer:array[0..7] of byte;
  Buffer2:array[0..7] of byte;
begin
     begin
FN := 'C:\neu.txt'; // 5 MB groß
    strm:=TFileStream.Create(FN,fmOpenRead);

if not FileExists(FN + 'UUX') then
     FileCreate(FN+ 'UUX');
OUTStrom:=TFileStream.Create(FN + '_ENC' ,fmOpenWrite or fmShareDenyNone);
    strm.Seek(0,soFromBeginning);
   OUTStrom.Seek(0,soFromBeginning);

    Base64Encode(Strm, 8, OUTStrom);
   strm.Free;
   OUTStrom.Free;
  end;

Hab das einfach mal so versucht, mit dem, was ich mir über Streams so zusammengoogeln konnte.
Die Buffergröße ist ... einfach mal geschätzt gewählt. Ob die sinnvoll ist, weiß ich nicht.

Jedenfalls bricht das Programm bei Durchführung einfach ab und bleibt im CPU Diassembler stehen:
datatype missalignment at 0x77b4d7e8.

Naja, vielleicht wißt Ihr ja, wie man das insgesamt besser lösen könnte.
Ich kenn mich mit Streams nicht so aus. Anfangs hatte ich darum eine Stringlist.loadfromFile('neu.txt') als Speicher verwenden wollen, aber das ging auch nicht, da dann nur die erste, kurze Zeile verwendet wurde.

Eine Suche hier im Forum und entwEcke nach Datei und Mime oder base64 brachte vieles, aber auch viele Threads, in denen die das mit Indy lösten.
Zudem hab ich aber Delphi 5. (64 Bit brauch ich nicht)



Vielleicht hat jemand eine Idee und einen Moment Zeit zu antworten.
(Der umgekehrten Weg (b64Decode) ist hoffentlich genauso einfach.?)

Danke.
MySQL-ERROR(): 1146
- - - Entschuldigung,
Diese Signatur ist in Deinem Land nicht vollständig sichtbar. :/
PGP Key ID: 0xB54AACD6
  Mit Zitat antworten Zitat
 

 

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 00:16 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