Öffnet eine Datei, um bestimmte Inhalte aus ihr zu lesen und/oder in diese zu schreiben.
File := FileOpen(DateiName, Flags , Kodierung)
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
In [AHK_L 54+] eine Zeichenkette aus Buchstaben für den gewünschten Zugriffsmodus, gefolgt von anderen Optionen (optional getrennt durch Leer- oder Tabulatorzeichen); oder in [AHK_L 42+] eine Kombination (Summe) von numerischen Flags. Mögliche Werte finden Sie in den Tabellen unten.
Wenn weggelassen, wird die Standardkodierung verwendet (definiert durch FileEncoding oder standardmäßig CP0). Wenn leer, wird standardmäßig CP0 (die Standard-ANSI-Codepage des Systems) verwendet. Andernfalls geben Sie die Kodierung oder Codepage für die Text-Ein-/Ausgabe an, z.B. "UTF-8"
, "UTF-16"
, CP936
oder 936
.
Wenn die Datei eine UTF-8- oder UTF-16-Byte-Order-Markierung (BOM) enthält oder wenn das h
-Flag (Handle) verwendet wird, werden dieser Parameter und die Standardkodierung ignoriert, es sei denn, die Datei wird nur mit Schreibzugriff geöffnet (d.h. der vorherige Inhalt der Datei wird verworfen).
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, andernfalls wird die Datei überschrieben. |
a | 2 | 0x2 | Append (Anfügen): Erstellt eine neue Datei, wenn sie nicht existiert, andernfalls 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. Freigabemodusflags werden ignoriert. Die Datei oder der Stream des Handles wird nicht auf eine Byte-Order-Markierung (BOM) hin überprüft. Das Datei-Handle wird nicht automatisch geschlossen, wenn das File-Objekt zerstört wird. Der Aufruf von File.Close hat keine Wirkung. Beachten Sie, dass File.Seek, File.Tell und File.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 - entspricht der Angabe von -rwd . Wenn alles weggelassen wird, werden standardmäßig alle Zugriffe freigegeben. |
||
0 | 0x0 | Wenn Flags numerisch ist und keine Freigabemodusflags angegeben sind, wird die Datei gesperrt. | |
256 | 0x100 | Lesezugriff freigeben. | |
512 | 0x200 | Schreibzugriff freigeben. | |
1024 | 0x400 | Löschzugriff freigeben. |
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 0 zurückgegeben und in [AHK_L 54+] A_LastError auf einen Fehlercode gesetzt.
Mit if File
oder IsObject(File)
können Sie prü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, Kodierung oder die Standardkodierung (definiert durch FileEncoding) ist 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 die BOM gesetzt, um sie von der Ausgabe auszuschließen. Folglich kann File.Pos unmittelbar nach dem Öffnen der Datei 3 oder 2 zurückgeben.
FileEncoding, File-Objekt, FileRead
Schreibt etwas Text in eine Datei und liest ihn zurück in den Speicher (bietet die gleiche Funktionalität wie dieses DllCall-Beispiel).
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() ; Die Datei wurde geschrieben, also lese ihren Inhalt 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()
Zeigt 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 im "`n"-Modus.
stdin := FileOpen("*", "r `n") ; Benötigt [v1.1.17+]
stdout := FileOpen("*", "w `n")
; Für ältere 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 "'. Schönen Tag noch.")
stdout.Read(0) ; Schreibpuffer leeren.
Sleep 5000