FileOpen RawRead vs CreateFile ReadFile Topic is solved

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

User avatar
jNizM
Posts: 3183
Joined: 30 Sep 2013, 01:33
Contact:

FileOpen RawRead vs CreateFile ReadFile

11 Apr 2017, 04:16

Hey,

kann mir jemand sagen, was ich übersehen haben (oder falsch mache), dass ich mit FileOpen & RawRead ein anderes (falsches) Ergebnis bekomme als mit CreateFile & ReadFile?

Code: Select all

f := FileOpen(filename, "r"))
while !(f.AtEOF) && (dataread := f.RawRead(data, 262144))
    NT_STATUS := DllCall("bcrypt\BCryptHashData", "ptr", hHash, "ptr", &data, "uint", dataread, "uint", 0)
f.Close()

Code: Select all

hFile := DllCall("CreateFile", "str", filename, "uint", 0x80000000, "uint", 0x1, "ptr", 0, "uint", 3, "uint", 0x08000000, "ptr", 0, "ptr")
VarSetCapacity(data, 262144)
while (DllCall("ReadFile", "ptr", hFile, "ptr", &data, "uint", 262144, "uint*", dataread, "ptr", 0)) && (dataread)
    NT_STATUS := DllCall("bcrypt\BCryptHashData", "ptr", hHash, "ptr", &data, "uint", dataread, "uint", 0)
DllCall("CloseHandle", "ptr", hFile)
Bemerkbar macht sich das vorallem bei kleinen Dateien. Bei großen passt es häufig

Edit:
In meiner Beispiel-Datei:
- dataread mit RawRead -> 6437 Bytes
- dataread mit ReadFile -> 6440 Bytes
- Datei-Eigenschaften -> 6440 Bytes
Jetzt muss ich nur noch rausfinden warum der unterschied



jNizM
[AHK] v2.0.5 | [WIN] 11 Pro (Version 22H2) | [GitHub] Profile
User avatar
jNizM
Posts: 3183
Joined: 30 Sep 2013, 01:33
Contact:

Re: FileOpen RawRead vs CreateFile ReadFile

11 Apr 2017, 05:16

Danke für den Hinweis
FileOpen wrote:Sobald eine Datei, die eine UTF-8- oder UTF-16-Bytereihenfolge-Markierung (BOM) hat, mit Lesezugriff geöffnet wird, wird die BOM von der Ausgabe ausgeschlossen, indem der Datei-Pointer daneben gesetzt wird. Folglich würde File.Position unmittelbar nach Öffnen der Datei 3 oder 2 melden.
Ach das ist doch (sorry für den Ausdruck) beh***ert, dass ich für RawRead extra f.Seek(0) setzten muss...
Wenn ich RawRead (liest unbearbeitete Binärdaten aus der Datei in den Speicher) verwende, gehe ich davon aus, dass ich auch alles aus der Datei im Raw-Format (unverändert) bekomme... und zwar komplett
[AHK] v2.0.5 | [WIN] 11 Pro (Version 22H2) | [GitHub] Profile
User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: FileOpen RawRead vs CreateFile ReadFile

11 Apr 2017, 06:04

Für die meisten Anwendungsfälle ist das jedoch sinnvoller die UTF-8 BOM wegzulassen. Vorallem, da RawWrite auch eine schreibt.
Recommends AHK Studio
User avatar
jNizM
Posts: 3183
Joined: 30 Sep 2013, 01:33
Contact:

Re: FileOpen RawRead vs CreateFile ReadFile

11 Apr 2017, 07:23

Mag sein, aber für mich heißt RAW -> Rohdaten, ergo komplett und ohne Veränderungen oder weglassen von Daten. So wie ein HexEditor es auch anzeigt (incl. EF BB BF) und ReadFile es auch handhabt.
[AHK] v2.0.5 | [WIN] 11 Pro (Version 22H2) | [GitHub] Profile
User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: FileOpen RawRead vs CreateFile ReadFile

11 Apr 2017, 09:15

Es soll auch Kinder geben die sich ihre eigene Geheimsprache ausdenken.
Ich denke, dass die praktischen Vorteile der UTF-8 BOM weglassen Methode auf der Hand liegen, wenn man Dateien von AutoHotkey schreibt und mit AutoHotkey liest.
Dies ist umso mehr so wenn man sich die normalem Use-cases eines File-Objekts anschaut. Vor solchen praktischen Überlegungen hat eine Argumentation wie deine wenig bestand, da nähmlich eher die Funktion umbenannt würde als die Funktionalität zu ändern.
Recommends AHK Studio

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 80 guests