FileRead

Liest den Inhalt einer Datei in eine Variable.

FileRead, AusgabeVar, Dateiname

Parameter

AusgabeVar

Name der Variable, in der die ermittelten Daten gespeichert werden sollen. Bei einem Problem wird AusgabeVar leer gemacht, z. B. wenn die Datei "in Benutzung" oder nicht vorhanden ist (in diesem Fall wird ErrorLevel auf 1 gesetzt). Sie wird auch leer gemacht, wenn Dateiname eine leere Datei ist (in diesem Fall wird ErrorLevel auf 0 gesetzt).

Dateiname

Name der zu lesenden Datei, die im A_WorkingDir-Verzeichnis vermutet wird, wenn kein absoluter Pfad angegeben ist.

Optionen: Null oder mehrere der folgenden Zeichenketten, die vor dem Dateinamen angegeben werden können. Die Optionen müssen jeweils mit einem Leer- oder Tabulatorzeichen getrennt werden. Zum Beispiel: *t *m5000 C:\Log-Dateien\200601.txt.

*c: Lädt eine Datei aus ClipboardAll oder anderen binären Daten. Alle anderen Optionen werden ignoriert, wenn *c vorhanden ist.

*m1024: Fehlt diese Option, wird die gesamte Datei geladen, sofern genügend Arbeitsspeicher verfügbar ist. Ist dies nicht der Fall, wird eine Fehlermeldung angezeigt und der Thread beendet (aber mit Try kann das verhindert werden). Ansonsten kann 1024 mit einer dezimalen oder hexadezimalen Anzahl an Bytes ersetzt werden. Wenn die Datei die angegebene Größe überschreitet, wird nur der führende Teil geladen.

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

*t: Ersetzt alle CR-LF-Paare (`r`n) mit einem LF-Zeichen (`n). Allerdings verschlechtert sich dadurch die Performance und wird normalerweise nicht benötigt. Zum Beispiel wäre ein Text, der `r`n enthält, bereits im richtigen Format, um in ein Gui-Edit-Steuerelement eingefügt werden zu können. Ebenso würde FileAppend beim Öffnen einer neuen Datei erkennen, wenn `r`n vorhanden ist; der Befehl weiß, jedes `r`n so zu lassen wie es ist, anstatt es in `r`r`n umzuwandeln. Die folgende Parsende Schleife wird immer korrekt funktionieren, egal ob eine Zeile mit `r`n oder `n endet: Loop, Parse, MeineDateiinhalte, `n, `r.

*Pnnn: [AHK_L 42+]: Überschreibt die gesetzte Standardcodierung von FileEncoding, wobei nnn ein Zeichensatzidentifikator sein muss.

ErrorLevel

[v1.1.04+]: Dieser Befehl ist in der Lage, bei Misserfolg eine Ausnahme auszulösen. Weitere Informationen finden Sie unter Laufzeitfehler.

ErrorLevel wird auf 0 gesetzt, wenn die Datei erfolgreich geladen wurde, und auf 1, falls eines der folgenden Probleme auftrat: 1) Datei nicht vorhanden; 2) Datei ist gesperrt oder nicht zugreifbar; 3) Das System hat nicht genügend Arbeitsspeicher, um die Datei zu laden.

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

Lesen von Binärdaten

Je nachdem, welche Datei, Parameter und Standardeinstellungen angegeben sind, interpretiert FileRead die Dateidaten als Text und wandelt sie in die ursprüngliche Codierung des Skripts um. Das führt wahrscheinlich zu Problemen, wenn die Datei binäre Daten enthält, außer in folgenden Fällen:

Beachten Sie, dass nur der Text vor der ersten binären Null von den meisten AutoHotkey-Befehlen und -Funktionen "gesehen" wird, sobald die Daten in AusgabeVar gelesen werden. Der komplette Inhalt allerdings ist weiterhin vorhanden und kann durch erweiterte Methoden wie NumGet() abgerufen werden.

Schließlich kann FileOpen() mit File.RawRead() oder File.ReadNum() dazu verwendet werden, binäre Daten einzulesen, ohne dabei erst die komplette Datei in den Speicher einlesen zu müssen.

Bemerkungen

Besteht das Ziel darin, einen großen Dateibereich in den Speicher zu laden, ist FileRead besser geeignet als eine Datei-lesende Schleife.

Eine Datei größer als 1 GB bewirkt, dass ErrorLevel auf 1 gesetzt und AusgabeVar leer gemacht wird. Wenn aber die *m-Option vorhanden ist, wird nur der führende Teil der Datei geladen.

FileRead ignoriert #MaxMem. Gibt es Bedenken, ob die Datei zu viel Speicher verwendet, kann die Dateigröße vorher mit FileGetSize überprüft werden.

FileOpen() unterstützt mehr Funktionen als FileRead, wie z. B. das Lesen oder Schreiben von Daten innerhalb der Datei, ohne dabei die gesamte Datei in den Speicher laden zu müssen. Siehe File-Objekt für eine Liste von Funktionen.

Siehe auch

FileEncoding, FileOpen/File-Objekt, Datei-lesende Schleife, FileReadLine, FileGetSize, FileAppend, IniRead, Sort, UrlDownloadToFile

Beispiele

; Beispiel #1: Liest die Textdatei in AusgabeVar.
FileRead, AusgabeVar, C:\Meine Dokumente\Meine Datei.txt
; Beispiel #2: Sortiert schnell den Inhalt einer Datei.
FileRead, Inhalt, C:\Adressenliste.txt
if not ErrorLevel  ; Erfolgreich geladen.
{
    Sort, Inhalt
    FileDelete, C:\Adressenliste (alphabetisch).txt
    FileAppend, %Inhalt%, C:\Adressenliste (alphabetisch).txt
    Inhalt =  ; Gibt den Speicher frei.
}