Öffnet eine Datei, um bestimmte Inhalte aus ihr zu lesen und/oder in diese zu schreiben.
FileObj := FileOpen(DateiName, Flags , Kodierung)
Typ: Zeichenkette
Name der Datei, die geöffnet werden soll. Wenn kein absoluter Pfad angegeben ist, wird die Datei im A_WorkingDir-Verzeichnis vermutet.
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
Typ: Zeichenkette oder Integer
Entweder eine Zeichenkette aus Buchstaben für den gewünschten Zugriffsmodus, gefolgt von anderen Optionen (optional getrennt durch Leer- oder Tabulatorzeichen), oder eine Kombination (Summe) von numerischen Flags. Mögliche Werte finden Sie in den Tabellen unten.
Typ: Zeichenkette oder Integer
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.Pos 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 . |
Typ: Objekt
Der Rückgabewert ist ein neues File-Objekt, das das offene Handle zur Datei kapselt. Verwenden Sie die Methoden und Eigenschaften dieses Objekts, um auf den Inhalt der Datei zuzugreifen.
Wenn die Datei nicht geöffnet werden kann, wird ein OSError ausgelöst.
File.ReadLine unterstützt immer `n
, `r`n
und `r
als Zeilenenden, fügt sie aber nicht in den Rückgabewert ein, egal ob die Optionen `r
oder `n
verwendet werden oder nicht. Die Optionen beeinflussen nur die Übersetzung von Zeilenenden innerhalb eines Textes, der von File.Read zurückgegeben oder von File.Write oder File.WriteLine geschrieben wurde.
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.
Falls erforderlich, kann der Schreibpuffer mit File.Read geleert werden, z.B. FileObj.Read(0)
. Siehe Beispiel #3 unten.
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).
DateiName := FileSelect("S16",, "Neue Datei erstellen:") if (DateiName = "") return try FileObj := FileOpen(DateiName, "w") catch as Fehler { MsgBox "Kann '" DateiName "' nicht zum Schreiben öffnen." . "`n`n" Type(Fehler) ": " Fehler.Message 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. FileObj.Write(TestZkette) FileObj.Close() ; Die Datei wurde geschrieben, also lese ihren Inhalt zurück in den Speicher. try FileObj := FileOpen(DateiName, "r-d") ; Liest die Datei ("r"), gibt alle Zugriffe außer Löschen ("-d") frei catch as Fehler { MsgBox "Kann '" DateiName "' nicht zum Lesen öffnen." . "`n`n" Type(Fehler) ": " Fehler.Message return } ZuLesendeZeichen := StrLen(TestZkette) TestZkette := FileObj.Read(ZuLesendeZeichen) FileObj.Close() MsgBox "Die folgende Zeichenkette wurde aus der Datei gelesen: " TestZkette
Öffnet das Skript im Schreibschutzmodus und liest dessen erste Zeile.
Skript := FileOpen(A_ScriptFullPath, "r") MsgBox Skript.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. stdin := FileOpen("*", "r") stdout := FileOpen("*", "w") 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