Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Dateigröße in Bytes aus Blob auslesen (https://www.delphipraxis.net/164940-dateigroesse-bytes-aus-blob-auslesen.html)

semo 6. Dez 2011 21:04

Delphi-Version: 2010

Dateigröße in Bytes aus Blob auslesen
 
Guten Abend,

ich steh gerade etwas auf dem Schlauch: ich muss Dateigrößen aus einem Blob auslesen.

Ich weiß, dass aus Hex
00 00 00 00 B7 86 44 41
2.690.414 Bytes herauszulesen sind.

Und ich weiß, dass in dem HEX-Wert
00 00 00 80 B7 86 44 41
2.690.415 Bytes herauszulesen sind.

Die beiden Werte habe ich durch Tests mit 2 Dateien ermittelt, deren Dateigröße ich kenne. Diese wurden in dem Blob hinterlegt.

Nur wie liest man die Dateigröße aus dem Blob nun wieder korrekt aus?

egentur 6. Dez 2011 21:32

AW: Dateigröße in Bytes aus Blob auslesen
 
Hi Semo
kommt auf die DB an
bei Oracle

select length(MyBlobfield) as BlobSize from MyTable

Gruß
egentur

semo 6. Dez 2011 21:41

AW: Dateigröße in Bytes aus Blob auslesen
 
Im Blob selbst sind weitere Daten wie Dateiname etc. vorhanden.
Es kommt nur darauf an, aus dem Hex Wert die Anzahl an Bytes auszulesen.
Der Datenbankhintergrund kann völlig außer Acht gelassen werden :-)

himitsu 6. Dez 2011 21:41

AW: Dateigröße in Bytes aus Blob auslesen
 
Code:
2690415= $00290D6F                101001000011010110111 1
$414486b7 80000000     01000001010001001000011010110111 10000000000000000000000000000000

                        3333333322222222111111110000000 0
                       77777777666666665555555544444444 33333333222222221111111100000000

2690414= $00290D6E                101001000011010110111 0
$414486B7 00000000     01000001010001001000011010110111 00000000000000000000000000000000
Eventuell fällt dir ja ein Muster auf?

Das Teil als LitleEndian Int64 auslesen, ein bissl Bitschifting (SHR) und dann noch 'ne Maske (AND) drüber, um die zusätlichen Datenbits loszuwerden


Durch die je 3 bösen Einsen würde ich aber so auf maximal mögliche 4 MB für die Dateien kommen.
Müßte man mal noch mehr Testdaten haben, mit "viel" größeren und kleineren Dateien. (z.B. halb/doppelt so Großen)

Bummi 6. Dez 2011 21:45

AW: Dateigröße in Bytes aus Blob auslesen
 
TBlobstream und Size ?

semo 6. Dez 2011 22:14

AW: Dateigröße in Bytes aus Blob auslesen
 
Ich habe weitere Dateien getestet:

1 byte große Datei ergab:
00 00 00 00 00 00 F0 3F

2.096.777 byte große Datei ergab:
00 00 00 00 89 FE 3F 41

eine doppelt so große Datei (4.193.554 bytes) ergab:
00 00 00 00 89 FE 4F 41

8.387.108 bytes
00 00 00 00 89 FE 5F 41

16.774.216
00 00 00 00 89 FE 6F 41

himitsu 6. Dez 2011 22:39

AW: Dateigröße in Bytes aus Blob auslesen
 
Noch eine Datei im Kilobytebereich wäre wohl ganz praktisch, aber bis jetzt zeigt sich schonmal ein böses Schema.

Die 11 höchsten Bits sind irgendwelche "Steuerinfos" und deine gewünschter Wert wird wohl so verschoben, daß das höchste gesetzte Bit bis dort ranverschoben wurde.
Man weiß also wo genau die gesuchten Bits anfangen (eigentlich aufhören), aber bis wo hin es geht, ist nicht erkennbar (kein direkter Marker vorhanden).
Und auch aus den 11 Bits kann man nix auslesen, denn z.B. 01000001010 kommt bei unterschiedlich langen Bitfolgen vor, wobei beim Letzten Wer auch noch ein Bit gedreht ist. :shock:

Wenn ich mich jetzt nirgendwo vertippt, verrechnet oder verkopiert hab, also die Werte stimmen, dann war's das wohl, da zwar (fast) alle Bits deiner Zahl vorhanden und sogar uncodiert sind, aber ohne ein erkennbares Ende kann man damit nix anfangen.

Code:
                        3333333322 222222111111110000000 0
                       77777777666 666665555555544444444 33333333222222221111111100000000

2690415= $00290D6F                101001000011010110111 1
$414486b7 80000000     01000001010 001001000011010110111 10000000000000000000000000000000

2690414= $00290D6E                101001000011010110111 0
$414486B7 00000000     01000001010 001001000011010110111 00000000000000000000000000000000 

1=      $00000001                 1
$3FF00000 00000000     00111111111 1000000000000000000000 0000000000000000000000000000000

2096777= $001FFE89                 111111111111010001001
$403FFE89 00000000     01000000001 1111111111110100010010 0000000000000000000000000000000

4193554= $003FFD12                 1111111111110100010010
$414FFE89 00000000     01000001010 0111111111110100010010 0000000000000000000000000000000

Edit > blöde Codeausrichtung ... also besser meinen Beitrag zitieren und dort drin nachsehn

Bummi 6. Dez 2011 22:42

AW: Dateigröße in Bytes aus Blob auslesen
 
ich glaube ich habe es, kranke Idee ...

jepp, definitiv Double ....

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const
 //s1:AnsiString=#$00#$00#$00#$00#$89#$FE#$3F#$41;
 //s1:AnsiString=#$00#$00#$00#$00#$00#$00#$F0#$3F;
 s1:AnsiString=#$00#$00#$00#$00#$89#$FE#$6F#$41;
var
 i:Double;
begin
 move(s1[1],i,8);
 Showmessage(FloatToStr(i));
end;

himitsu 6. Dez 2011 22:48

AW: Dateigröße in Bytes aus Blob auslesen
 
Das wäre ja zu einfach :shock:

Bummi 6. Dez 2011 22:50

AW: Dateigröße in Bytes aus Blob auslesen
 
3 Vergleiche sollten als "Beweis" genügen ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:33 Uhr.
Seite 1 von 2  1 2      

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