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. AusgabeVar wird leer gemacht, wenn ein Problem auftritt, z. B. wenn die Datei "in Benutzung" ist oder nicht existiert (in diesem Fall wird ErrorLevel auf 1 gesetzt). Die Ausgabevariable 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 mehr der folgenden Zeichenketten, die vor dem Dateinamen angegeben werden können. Die Optionen müssen jeweils mit einem Leer- oder Tabulatorzeichen voneinander 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. Wenn der Arbeitsspeicher dafür nicht ausreicht, wird eine Fehlermeldung angezeigt und der Thread beendet (aber mit Try kann das verhindert werden). Ansonsten können Sie 1024 mit einer dezimalen oder hexadezimalen Anzahl von Bytes ersetzen. Wenn die Datei die angegebene Größe überschreitet, wird nur ihr führender Teil geladen.

Hinweis: Dies 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). Diese Übersetzung reduziert jedoch die Performance und ist in der Regel nicht notwendig. 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 stellt FileAppend automatisch fest, ob ein CR-LF-Paar (`r`n) vorhanden ist, wenn eine neue Datei geöffnet wird; der Befehl weiß, jedes `r`n so zu lassen wie es ist, anstatt es in `r`r`n zu übersetzen. Die folgende Parsende Schleife wird korrekt funktionieren, egal ob eine Zeile mit `r`n oder nur mit `n endet: Loop, Parse, InhaltMeinerDatei, `n, `r.

*Pnnn: [AHK_L 42+]: Überschreibt die via FileEncoding gesetzte Standardcodierung, 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. Ansonsten wird ErrorLevel auf 1 gesetzt, wenn ein Problem aufgetreten ist. Probleme sind zum Beispiel: 1) Datei existiert nicht; 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 nach Datei, Parametern und Standardeinstellungen wird FileRead den Inhalt der Datei eventuell als Text interpretieren und ihn in die vom Skript verwendete native Codierung konvertieren. Diese Konvertierung kann zu Problemen führen, wenn die Datei binäre Daten enthält, außer in folgenden Fällen:

Beachten Sie, dass nach dem Einlesen der Daten in AusgabeVar nur der Text vor der ersten binären Null (falls vorhanden) von den meisten AutoHotkey-Befehlen und -Funktionen "gesehen" wird. Der gesamte Inhalt ist jedoch weiterhin vorhanden und kann mit erweiterten Methoden wie NumGet() abgerufen werden.

Mit FileOpen() in Verbindung mit File.RawRead() oder File.ReadNum() können binäre Daten erfasst werden, ohne die komplette Datei in den Speicher einlesen zu müssen.

Bemerkungen

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

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. Wenn Sie Bedenken haben, dass die Datei zu viel Arbeitsspeicher verbraucht, können Sie zunächst ihre Größe mit FileGetSize überprüfen.

Die FileOpen-Funktion bietet eine weitaus fortschrittlichere Funktionalität als FileRead. Sie kann zum Beispiel Daten an einer bestimmten Stelle in der Datei lesen oder schreiben, ohne zuerst die gesamte Datei in den Arbeitsspeicher lesen zu müssen. Eine Liste aller Features finden Sie unter File-Objekt.

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.
}