![]() |
Datei als array of byte einlesen
Hallo,
ich muss Dateien byte-weise einlesen, und verwende folgenden Code
Code:
Das Problem ist, wenn ich das durchlaufen lasse, klappt es zu 80%, manchmal kommt dann ein E/A - Fehler 32. Das ist meistens der Fall, wenn im Win Explorer die Datei noch fokusiert ist.
var buffer : array of byte;
afile: file of byte; i:Integer; begin AssignFile(afile, FPdf); Reset(afile); SetLength(buffer, FileSize(afile)); For i := 1 to FileSize(afile) do Read(afile, buffer[i]); CloseFile(afile); end; Während der Entwicklung habe ich hier immer das gleiche PDF, es kann also nicht an der Datei selber liegen. Denn auch wenn ich den Explorer dann schließe, und es nochmal durchlaufen lasse, klappt es dann. Gibt es eine zuverlässigere Routine, um die Datei als array of byte einzulesen oder geht das generell nicht, wenn die Datei noch fokusiert ist? Danke Christof |
AW: Datei als array of byte einlesen
Immer diese uralten Turbo Pascal Datei-Funktionen :roll:
Delphi-Quellcode:
Falls das Problem trotzdem auftritt könnte das Problem eine Shell Extension sein, die eine Vorschau der PDF im Explorer anzeigt und die PDF dafür exklusiv öffnet.
var buffer: array of byte;
i:Integer; datei: TFileStream; begin datei := TFileStream.Create(FPdf, fmOpenRead); try SetLength(buffer, datei.Size); datei.Read(buffer[0], datei.Size); finally datei.Free; end; end; Dann kannst du da nicht wirklich was machen. |
AW: Datei als array of byte einlesen
Hallo,
danke für die schnelle Antwort. Leider funktioniert das nicht, wie gewünscht. Es läuft alles ohne Fehler durch, aber ich muss das array of byte ja an eine Funktion übergeben, die nicht von mir ist. Die Verarbeitung läuft auch durch, aber das, was am Ende rauskommt, lässt sich nicht mehr öffnen. Das ist jetzt schwer im Detail zu erklären, aber die Funktion packt das PDF in einen DICOM container, nachdem es als array of byte eingelesen wurde und schickt es an einen Server. Dort lässt sich das DICOM dann nicht weiterverarbeiten. Mit der anderen Routine von mir klappt das. Gruß Christof |
AW: Datei als array of byte einlesen
Es gibt die globale Variabel FileMode, über die gesteuert wird, wie eine Datei geöffnet wird und was andere gleichzeitig mit der Datei machen dürfen.
Der Standard ist fmOpenReadWrite, das dürfte für dich aber nicht relevant sein. Versuch es mal mit: fmShareDenyNone. Andere haben uneingeschränkten Zugriff. Oder eventuell: fmOpenRead. Nur Lesezugriff. Ansonsten hier mal nachschauen: ![]() |
AW: Datei als array of byte einlesen
Zitat:
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 :/ |
AW: Datei als array of byte einlesen
Zitat:
Array of Byte ist Array of Byte! oder soll es statt "dynamisch" "statisch" sein? dann könnte u.U das filesize etwas groß sein?! Zitat:
Das klingt als sei es eine Datei. Gruß K-H P.S. Ich stimme mit Neutral General überein, an seiner Methode liegt es nicht. |
AW: Datei als array of byte einlesen
In s3iner Methode ist alles um 1 byte nach hinten verschoben, weil die Zählvariable bei eins los geht. Dqher wuch der Fehler, weil der buffer zu klein ist.
|
AW: Datei als array of byte einlesen
Ich werfe noch
![]() Zitat:
Ist das wirklich so? Also zumindest bei fmCreate kann man Rights nicht angeben (ist immer fmShareExclusive), aber beim Rest ging das glaube ich... |
AW: Datei als array of byte einlesen
Zitat:
Zitat:
Delphi-Quellcode:
wird nur dann
fmCreate
Delphi-Quellcode:
verwendet, wenn als Mode
fmShareExclusive
Delphi-Quellcode:
bzw.
$FFFF
Delphi-Quellcode:
übergeben wird. Dabei wird aber auch das
fmCreate OR $FF
Delphi-Quellcode:
quasi herausgenommen und eben nur
fmCreate
Delphi-Quellcode:
übergeben.
fmShareExclusive
Der Rights-Parameter wird sogar ausschließlich beim
Delphi-Quellcode:
ausgewertet und das auch nur unter POSIX. Dabei wird die Datei mit den angegebenen Zugriffsrechten angelegt. Beim Öffnen einer existierenden Datei würde das Ändern der Zugriffsrechte ja auch keinen Sinn ergeben.
fmCreate
|
AW: Datei als array of byte einlesen
Wie kann ich denn bei TFileStream eine Datei nicht-exklusiv erstellen und öffnen?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz