Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Datei als array of byte einlesen (https://www.delphipraxis.net/194220-datei-als-array-byte-einlesen.html)

Uwe Raabe 31. Okt 2017 10:53

AW: Datei als array of byte einlesen
 
Zitat:

Zitat von Redeemer (Beitrag 1384630)
Wie kann ich denn bei TFileStream eine Datei nicht-exklusiv erstellen und öffnen?

Z.B. so:
Delphi-Quellcode:
TFileStream.Create(<filename>, fmCreate or fmShareDenyWrite);


Sobald die Datei dann existiert kannst du über
Delphi-Quellcode:
TFileStream.Create(<filename>, fmOpenRead or fmShareDenyNone);
von anderer Stelle lesend darauf zugreifen.

Redeemer 31. Okt 2017 12:23

AW: Datei als array of byte einlesen
 
In Delphi 2009 ist fmCreate als $FFFF definiert...
Ich möchte die Datei nur schreiben, nicht lesen.

Uwe Raabe 31. Okt 2017 13:36

AW: Datei als array of byte einlesen
 
Zitat:

Zitat von Redeemer (Beitrag 1384638)
In Delphi 2009 ist fmCreate als $FFFF definiert...
Ich möchte die Datei nur schreiben, nicht lesen.

Soweit ich weiß, ist in D2009 bei fmCreate der Share-Mode immer 0.

himitsu 31. Okt 2017 16:59

AW: Datei als array of byte einlesen
 
Man kann auch problemlos einen eigenen Constructor für TFileStream schreiben
oder nutzt THandleStream mit MSDN-Library durchsuchenCreateFile
und kann da dann machen was man will.

PS: Delphi-Referenz durchsuchenTFile.ReadAllBytes

tofse 6. Nov 2017 13:25

AW: Datei als array of byte einlesen
 
Zitat:

Zitat von Neutral General (Beitrag 1384581)

Ich behaupte einfach mal ganz dreist dass, das nicht an meiner Methode liegt.
In dem buffer-Array sollte am Ende von deiner und meiner Methode exakt das gleiche drin stehen.

Und wenn dus schon mit den uralt-Funktionen machst, dann lies bitte nicht jedes Byte einzeln aus der Datei :/

Hallo,
so hat es funktioniert
Delphi-Quellcode:
 datei := TFileStream.Create(FPdf, fmOpenRead);
 try

     SetLength(buffer, datei.Size);
     datei.Read(buffer[1], datei.Size);
 finally
     datei.Free;
 end;

Neutral General 6. Nov 2017 13:50

AW: Datei als array of byte einlesen
 
Zitat:

Zitat von tofse (Beitrag 1385373)
Hallo,
so hat es funktioniert

Du hast 2 Möglichkeiten:

1) NICHT ZU EMPFEHLEN
Delphi-Quellcode:
datei := TFileStream.Create(FPdf, fmOpenRead);
try
   SetLength(buffer, datei.Size+1); // +1 !
   datei.Read(buffer[1], datei.Size);
finally
   datei.Free;
end;
wenn du schon ab Index 1 einliest, dann muss das Array 1 Byte größer sein oder das letzte Byte steht in der Pampa was böse in die Hose gehen kann.

2) Besser:
Delphi-Quellcode:
datei := TFileStream.Create(FPdf, fmOpenRead);
try
   SetLength(buffer, datei.Size);
   datei.Read(buffer[0], datei.Size);
finally
   datei.Free;
end;
Und du passt deine anderen Methoden zum verarbeiten der PDF an, sodass diese ab buffer[0] anfangen zu lesen und nicht ab buffer[1]!
Das ist nämlich dein wahres Problem :!:

tofse 6. Nov 2017 14:09

AW: Datei als array of byte einlesen
 
Zitat:

Zitat von Neutral General (Beitrag 1385380)

Und du passt deine anderen Methoden zum verarbeiten der PDF an, sodass diese ab buffer[0] anfangen zu lesen und nicht ab buffer[1]!
Das ist nämlich dein wahres Problem :!:

Ok, habe ich verstanden, geht aber nicht, da nicht von mir.
Deshalb verwende ich die Variante 1

Dennoch danke!

Neutral General 6. Nov 2017 14:18

AW: Datei als array of byte einlesen
 
Aber der Code ist doch vorhanden oder nicht?
Bzw. einer deiner Kollegen o.ä. hat den Code doch geschrieben oder nicht?

Also wenn der Code vorhanden ist dann beheb den Fehler selbst oder sag dem Bescheid der das verbrochen hat.

tofse 6. Nov 2017 14:22

AW: Datei als array of byte einlesen
 
Hm, ne.
Das ist eine kommerzielle COM/ActiveX API, ich teste die gerade, bevor wir kaufen.
Ich habe da mal angefragt, wieso das so ist.

Gruß

himitsu 6. Nov 2017 14:32

AW: Datei als array of byte einlesen
 
0 oder 1 ....

Es sei denn Buffer ist ein String/AnsiString :stupid:



Nja, das "eine" Problem in Post #1 hätte er leicht finden können, indem einfach mal die Bereichsprüfung aktiviert wird.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:42 Uhr.
Seite 2 von 3     12 3      

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