FileRead

Liest den Inhalt einer Datei in eine Variable.

FileRead, AusgabeVar, DateiName

Parameter

AusgabeVar

Name der Ausgabevariable, in der die abgerufenen 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 Datei, die gelesen werden soll. Wenn kein absoluter Pfad angegeben ist, wird die Datei im A_WorkingDir-Verzeichnis vermutet.

Optionen: Direkt vor dem Dateinamen können beliebig viele der folgenden Zeichenketten angegeben werden. Trennen Sie alle Optionen jeweils durch ein Leer- oder Tabulatorzeichen. Zum Beispiel: *t *m5000 C:\Log-Dateien\200601.txt.

*c: Lädt eine ClipboardAll-Datei oder andere Binärdaten. Alle anderen Optionen werden ignoriert, wenn *c vorhanden ist.

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

*t: 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. In ähnlicher Weise stellt FileAppend automatisch fest, ob ein CR-LF-Paar (`r`n) vorhanden ist, wenn eine neue Datei geöffnet wird; der Befehl weiß, dass er jedes `r`n unverändert schreiben muss, 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, MeineDateiInhalt, `n, `r.

*Pnnn [AHK_L 42+]: Überschreibt die via FileEncoding gesetzte Standardkodierung, wobei nnn ein numerischer Codepageidentifikator sein muss.

Fehlerbehandlung

[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. Bei Misserfolg wird es auf 1 gesetzt. Misserfolge sind zum Beispiel: 1) Datei existiert nicht; 2) Datei ist gesperrt oder nicht zugreifbar; 3) Das System hat nicht genug Speicher, 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 kann FileRead den Inhalt der Datei als Text interpretieren und ihn in die vom Skript verwendete native Kodierung konvertieren. Diese Konvertierung kann zu Problemen führen, wenn die Datei Binärdaten enthält, außer in den folgenden Fällen:

Beachten Sie, dass, nachdem die Daten in die AusgabeVar gelesen wurden, nur der Text vor der ersten binären Null (falls vorhanden) von den meisten AutoHotkey-Befehlen und -Funktionen "gesehen" wird. Der gesamte Inhalt existiert aber noch und kann mit erweiterten Methoden wie NumGet() abgerufen werden.

Mit FileOpen() und File.RawRead()/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.

Eine Datei größer als 1 GB führt dazu, dass ErrorLevel auf 1 gesetzt und AusgabeVar leer gemacht wird, es sei denn, die *m-Option ist vorhanden, dann wird nur der beginnende Teil der Datei geladen.

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

Die FileOpen-Funktion 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, FileReadLine, FileGetSize, FileAppend, IniRead, Sort, UrlDownloadToFile

Beispiele

Liest eine Textdatei und speichert ihren kompletten Inhalt in AusgabeVar.

FileRead, AusgabeVar, C:\Meine Dokumente\Meine Datei.txt

Sortiert schnell den Inhalt einer Datei.

FileRead, Inhalt, C:\Adressliste.txt
if not ErrorLevel  ; Erfolgreich geladen.
{
    Sort, Inhalt
    FileDelete, C:\Adressliste (alphabetisch).txt
    FileAppend, %Inhalt%, C:\Adressliste (alphabetisch).txt
    Inhalt := ""  ; Speicher freigeben.
}