FileRead

Ruft den Inhalt einer Datei ab.

Text := FileRead(DateiName , Optionen)

Parameter

DateiName

Typ: Zeichenkette

Name der Datei, die gelesen werden soll. Wenn kein absoluter Pfad angegeben ist, wird die Datei im A_WorkingDir-Verzeichnis vermutet.

Optionen

Typ: Zeichenkette

Beliebig viele der folgenden Zeichenketten. Trennen Sie alle Optionen jeweils durch ein Leer- oder Tabulatorzeichen. Zum Beispiel: "`n m5000 UTF-8"

Kodierung: Geben Sie einen beliebigen Kodierungsnamen an, der von FileEncoding unterstützt wird (mit Ausnahme der leeren Zeichenkette), um diese Kodierung zu verwenden, wenn die Datei keine UTF-8- oder UTF-16-Byte-Order-Markierung hat. Wenn weggelassen, wird standardmäßig A_FileEncoding verwendet.

RAW: Geben Sie das Wort RAW an (nicht Groß-/Kleinschreibung-sensitiv), um den Inhalt der Datei als rohe Binärdaten zu lesen und ein Buffer-Objekt anstelle einer Zeichenkette zurückzugeben. Diese Option überschreibt jede vorher festgelegte Kodierung und umgekehrt.

m1024: Wenn diese Option weggelassen wird, wird die gesamte Datei geladen, es sei denn, der Speicher reicht nicht aus, dann wird eine Fehlermeldung angezeigt und der Thread beendet (kann aber mit Try umgangen werden). Andernfalls ersetzen Sie 1024 mit einer dezimalen oder hexadezimalen Anzahl von Bytes. Wenn die Datei die angegebene Größe überschreitet, wird nur ihr beginnender Teil geladen.

Hinweis: Dies kann dazu führen, dass die letzte Zeile mit einem einzelnen CR-Zeichen (`r) statt mit dem CR-LF-Paar (`r`n) endet.

`n (ein LF-Zeichen): Ersetzt alle CR-LF-Paare (`r`n) mit einem LF-Zeichen (`n). Diese Übersetzung verringert jedoch die Performanz und ist normalerweise nicht erforderlich. Zum Beispiel wäre ein Text, der `r`n enthält, bereits im richtigen Format, um in ein Gui-Edit-Steuerelement eingefügt zu werden. Die folgende parsende Schleife wird korrekt funktionieren, egal ob eine Zeile mit `r`n oder nur mit `n endet: Loop Parse, MeineDateiInhalt, "`n", "`r".

Rückgabewert

Typ: Zeichenkette oder Objekt

Diese Funktion gibt den Inhalt der angegebenen Datei zurück. Der Rückgabewert ist ein Buffer-Objekt, wenn die RAW-Option aktiv ist und die Datei geöffnet werden kann, andernfalls eine Zeichenkette. Wenn die Datei nicht existiert oder aus einem anderen Grund nicht geöffnet werden kann, wird eine leere Zeichenkette zurückgegeben.

Fehlerbehandlung

Es wird ein OSError ausgelöst, wenn die Datei aufgrund eines Problems nicht geöffnet oder gelesen werden konnte.

Eine Datei größer als 4 GB führt dazu, dass ein MemoryError ausgelöst wird, es sei denn, die *m-Option ist vorhanden, dann wird nur der beginnende Teil der Datei geladen. Ein MemoryError wird auch ausgelöst, wenn das Programm nicht genügend Speicher für die angeforderte Datenmenge reservieren kann.

A_LastError wird auf das Ergebnis der Systemfunktion GetLastError() gesetzt.

Lesen von Binärdaten

Wenn die RAW-Option verwendet wird, ist der Rückgabewert ein Buffer-Objekt, das den rohen, unveränderten Inhalt der Datei enthält. Die Size-Eigenschaft des Objekts gibt die Anzahl der gelesenen Bytes zurück. Mit NumGet oder StrGet können die Daten aus dem Pufferspeicher abgerufen werden. Zum Beispiel:

buf := FileRead(A_AhkPath, "RAW")
if StrGet(buf, 2, "cp0") == "MZ"  ; Scheint eine EXE-Datei zu sein...
{
    ; Architekturtyp aus dem COFF-Dateiheader abrufen.
    arch := NumGet(buf, NumGet(buf, 0x3C, "uint") + 4, "ushort")
    arch := arch=0x8664 ? "x64-" : arch=0x014C ? "x86-" : "unbekannte "
    ; Architekturtyp und Dateigröße anzeigen.
    MsgBox "Diese " arch "EXE-Datei ist " buf.Size " Bytes groß."
}
buf := ""

Diese Option ist in der Regel zum Lesen von binären Daten erforderlich, da standardmäßig alle aus der Datei gelesenen Bytes als Text interpretiert werden und möglicherweise von der Kodierung der Quelldatei (wie in den Optionen oder durch A_FileEncoding angegeben) in die native Kodierung des Skripts (UTF-16) umgewandelt sind. Wenn es sich bei den Daten nicht um UTF-16-Text handelt, kann diese Umwandlung zu unerwarteten Ergebnissen führen.

Eine weitere Demonstration der RAW-Option finden Sie unter ClipboardAll-Beispiel #2.

Mit FileOpen und File.RawRead oder File.ReadNum können Binärdaten gelesen werden, ohne erst die komplette Datei in den Speicher zu lesen.

Bemerkungen

FileRead ist deutlich performanter als eine dateilesende Schleife, wenn es darum geht, alles oder einen großen Teil einer Datei in den Speicher zu laden.

Wenn Sie befürchten, dass die Datei zu viel Speicher verbraucht, prüfen Sie zunächst ihre Größe mit FileGetSize.

FileOpen bietet weitaus mehr Funktionalität als FileRead, z.B. kann sie Daten an einer bestimmten Stelle in der Datei lesen oder schreiben, ohne erst die gesamte Datei in den Speicher zu lesen. Eine Liste aller Features finden Sie unter File-Objekt.

FileEncoding, FileOpen/File-Objekt, dateilesende Schleife, FileGetSize, FileAppend, IniRead, Sort, Download

Beispiele

Liest eine Textdatei und speichert ihren kompletten Inhalt in MeinText.

MeinText := FileRead("C:\Meine Dokumente\Meine Datei.txt")

Sortiert schnell den Inhalt einer Datei.

Inhalt := FileRead("C:\Adressliste.txt")
Inhalt := Sort(Inhalt)
FileDelete "C:\Adressliste (alphabetisch).txt"
FileAppend Inhalt, "C:\Adressliste (alphabetisch).txt"
Inhalt := "" ; Speicher freigeben.