Öffnet eine Datei, um bestimmte Inhalte aus ihr zu lesen und/oder in diese zu schreiben.
File := FileOpen(DateiName, Flags , Codierung)
Name der Datei, die geöffnet werden soll. Wenn kein absoluter Pfad angegeben ist, wird die Datei im A_WorkingDir-Verzeichnis vermutet.
[v1.1.17+]: Geben Sie ein Sternchen (oder zwei) wie unten gezeigt an, um die Standardeingabe, Standardausgabe oder Standardfehlerausgabe zu öffnen:
FileOpen("*", "r") ; für stdin FileOpen("*", "w") ; für stdout FileOpen("**", "w") ; für stderr
Seit [AHK_L 54] entweder eine Zeichenkette mit Zeichen für den gewünschten Zugriffsmodus, gefolgt von anderen Optionen (optional getrennt durch Leerzeichen und Tabulatoren); oder in [AHK_L 42+] eine Kombination (Summe) von numerischen Flags. Unterstützte Werte werden in den folgenden Tabellen beschrieben.
Der Zeichensatz, der zur Textverarbeitung verwendet werden soll, falls die Datei keine UTF-8- oder UTF-16-Byte-Order-Markierung enthält, oder wenn das h
(Handle) benutzt wird. Lässt man diesen Parameter weg, wird der aktuelle Wert von A_FileEncoding verwendet.
Flag | Dez | Hex | Beschreibung |
---|---|---|---|
r | 0 | 0x0 | Read (Lesen): Schlägt fehl, wenn die Datei nicht existiert. |
w | 1 | 0x1 | Write (Schreiben): Erstellt eine neue Datei, wenn sie nicht existiert, ansonsten wird die Datei überschrieben. |
a | 2 | 0x2 | Append (Anfügen): Erstellt eine neue Datei, wenn sie nicht existiert, ansonsten wird der Dateizeiger an das Ende der Datei verschoben. |
rw | 3 | 0x3 | Read/Write (Lesen/Schreiben): Erstellt eine neue Datei, wenn sie nicht existiert. |
h | Kennzeichnet, dass DateiName ein Datei-Handle ist, das in ein Objekt gewrappt werden soll. Ignoriert Freigabemodus-Flags und verhindert, dass in der Datei oder im Stream des Handles eine Byte-Order-Markierung (BOM) gesucht wird. Das Datei-Handle wird nicht automatisch geschlossen, wenn das File-Objekt zerstört wird. Der Aufruf von Close hat keinen Effekt. Beachten Sie, dass Seek, Tell und Length nicht verwendet werden sollten, wenn DateiName ein Handle ist, das auf ein nicht-suchendes Device (z. B. ein Pipe oder ein Kommunikations-Device) verweist. |
Flag | Dez | Hex | Beschreibung |
---|---|---|---|
-rwd | Sperrt die Datei für Lese-, Schreib- und/oder Löschzugriffe. Es sind beliebige Kombinationen von r , w und d möglich. Die Angabe von - ist das gleiche wie, als würde man -rwd angeben. Wenn alles weggelassen wird, werden standardmäßig alle Zugriffe freigegeben. |
||
0 | 0x0 | Wenn Flags numerisch ist und keine Freigabemodus-Flags angegeben sind, wird die Datei gesperrt. | |
256 | 0x100 | Gibt Lesezugriff frei. | |
512 | 0x200 | Gibt Schreibzugriff frei. | |
1024 | 0x400 | Gibt Löschzugriff frei. |
Flag | Dez | Hex | Beschreibung |
---|---|---|---|
`n | 4 | 0x4 | Ersetzt beim Schreiben `r`n mit `n und beim Lesen `n mit `r`n . |
`r | 8 | 0x8 | Ersetzt beim Schreiben das alleinstehende `r mit `n . |
Wenn die Datei erfolgreich geöffnet wurde, wird ein File-Objekt zurückgegeben.
Wenn die Funktion fehlschlägt, wird eine 0 zurückgegeben und [in AHK_L 54+] A_LastError auf einen Fehlercode gesetzt.
Mit if File
oder IsObject(File)
kann man überprüfen, ob die Funktion erfolgreich war.
Beim Erstellen einer UTF-8- oder UTF-16-Datei wird eine Byte-Order-Markierung (BOM) in die Datei geschrieben, es sei denn, Codierung (oder A_FileEncoding, falls Codierung weggelassen wird) enthält UTF-8-RAW
oder UTF-16-RAW
.
Wenn eine Datei mit einer UTF-8- oder UTF-16-Byte-Order-Markierung (BOM) via Lesezugriff geöffnet wird, wird der Dateizeiger hinter der BOM positioniert, damit sie bei der Ausgabe nicht enthalten ist. Folglich wird File.Position
unmittelbar nach Öffnen der Datei eventuell 3 oder 2 melden.
FileEncoding, File-Objekt, FileRead
Schreibt etwas Text in eine Datei und liest ihn zurück in den Speicher (stellt die gleiche Funktionalität wie dieses DllCall-Beispiel bereit).
FileSelectFile, DateiName, S16,, Neue Datei erstellen: if (DateiName = "") return File := FileOpen(DateiName, "w") if !IsObject(File) { MsgBox Kann "%DateiName%" nicht zum Schreiben öffnen. return } TestZkette := "Das ist eine Zeichenkette.`r`n" ; Wenn eine Datei auf diese Weise geschrieben wird, sollte `r`n anstelle von `n verwendet werden, um eine neue Zeile zu beginnen. File.Write(TestZkette) File.Close() ; Liest den Inhalt der Datei, nachdem sie geschrieben wurde, zurück in den Speicher. File := FileOpen(DateiName, "r-d") ; Liest die Datei ("r"), gibt alle Zugriffe außer Löschen ("-d") frei if !IsObject(File) { MsgBox Kann "%DateiName%" nicht zum Lesen öffnen. return } ZuLesendeZeichen := StrLen(TestZkette) TestZkette := File.Read(ZuLesendeZeichen) File.Close() MsgBox Die folgende Zeichenkette wurde aus der Datei gelesen: %TestZkette%
Öffnet das Skript im Schreibschutzmodus und liest dessen erste Zeile.
File := FileOpen(A_ScriptFullPath, "r") MsgBox % File.ReadLine()
Demonstriert die Verwendung der Standard-Eingabe/Ausgabe-Datenströme.
; Öffnet ein Konsolenfenster für diese Demonstration:
DllCall("AllocConsole")
; Öffnet die stdin/stdout-Ströme der Anwendung mit der Option "`n".
stdin := FileOpen("*", "r `n") ; Benötigt [v1.1.17+]
stdout := FileOpen("*", "w `n")
; Bei älteren Versionen:
; stdin := FileOpen(DllCall("GetStdHandle", "int", -10, "ptr"), "h `n")
; stdout := FileOpen(DllCall("GetStdHandle", "int", -11, "ptr"), "h `n")
stdout.Write("Bitte Anfrage eingeben.`n\> ")
stdout.Read(0) ; Schreibpuffer leeren.
query := RTrim(stdin.ReadLine(), "`n")
stdout.WriteLine("Die Anfrage war '" query "'. Einen schönen Tag noch.")
stdout.Read(0) ; Schreibpuffer leeren.
Sleep 5000