class File

Ein File-Objekt ist eine Repräsentation einer Datei im zugrundeliegenden System.

Die Klasse File erweitert das Modul FileTest und unterstützt Singleton-Methoden wie File.exist?.

Über die Beispiele

Viele Beispiele hier verwenden diese Variablen

# English text with newlines.
text = <<~EOT
  First line
  Second line

  Fourth line
  Fifth line
EOT

# Russian text.
russian = "\u{442 435 441 442}" # => "тест"

# Binary data.
data = "\u9990\u9991\u9992\u9993\u9994"

# Text file.
File.write('t.txt', text)

# File with Russian text.
File.write('t.rus', russian)

# File with binary data.
f = File.new('t.dat', 'wb:UTF-16')
f.write(data)
f.close

Zugriffsmodi

Die Methoden File.new und File.open erstellen jeweils ein File-Objekt für einen gegebenen Dateipfad.

Zeichenketten-Zugriffsmodi

Die Methoden File.new und File.open können ein Zeichenkettenargument mode annehmen, welches

Lese-/Schreibmodus

Der Lese-/Schreibmodus mode bestimmt

Diese Tabellen fassen zusammen

Read/Write Modes for Existing File

|------|-----------|----------|----------|----------|-----------|
| R/W  | Initial   |          | Initial  |          | Initial   |
| Mode | Truncate? |  Read    | Read Pos |  Write   | Write Pos |
|------|-----------|----------|----------|----------|-----------|
| 'r'  |    No     | Anywhere |    0     |   Error  |     -     |
| 'w'  |    Yes    |   Error  |    -     | Anywhere |     0     |
| 'a'  |    No     |   Error  |    -     | End only |    End    |
| 'r+' |    No     | Anywhere |    0     | Anywhere |     0     |
| 'w+' |    Yes    | Anywhere |    0     | Anywhere |     0     |
| 'a+' |    No     | Anywhere |   End    | End only |    End    |
|------|-----------|----------|----------|----------|-----------|

Read/Write Modes for \File To Be Created

|------|----------|----------|----------|-----------|
| R/W  |          | Initial  |          | Initial   |
| Mode |  Read    | Read Pos |  Write   | Write Pos |
|------|----------|----------|----------|-----------|
| 'w'  |   Error  |    -     | Anywhere |     0     |
| 'a'  |   Error  |    -     | End only |     0     |
| 'w+' | Anywhere |    0     | Anywhere |     0     |
| 'a+' | Anywhere |    0     | End only |    End    |
|------|----------|----------|----------|-----------|

Beachten Sie, dass die Modi 'r' und 'r+' für eine nicht existierende Datei nicht erlaubt sind (Ausnahme wird ausgelöst).

In den Tabellen

Lese-/Schreibmodi für existierende Dateien
Lese-/Schreibmodi für zu erstellende Dateien

Beachten Sie, dass die Modi 'r' und 'r+' für eine nicht existierende Datei nicht erlaubt sind (Ausnahme wird ausgelöst).

Datenmodus

Um anzugeben, ob Daten als Text oder als Binärdaten behandelt werden sollen, kann eines der folgenden Suffixe an einen der obigen Zeichenketten-Lese-/Schreibmodi angehängt werden

Wenn keiner angegeben ist, wird der Stream standardmäßig auf Textdaten gesetzt.

Beispiele

File.new('t.txt', 'rt')
File.new('t.dat', 'rb')

Wenn der Datenmodus angegeben ist, darf der Lese-/Schreibmodus nicht weggelassen werden, und der Datenmodus muss dem Datei-Erstellungsmodus vorausgehen, falls angegeben.

File.new('t.dat', 'b')   # Raises an exception.
File.new('t.dat', 'rxb') # Raises an exception.

Datei-Erstellungsmodus

Das Folgende kann an jeden schreibbaren Zeichenkettenmodus angehängt werden.

Beispiel

File.new('t.tmp', 'wx')

Wenn der Datei-Erstellungsmodus angegeben ist, darf der Lese-/Schreibmodus nicht weggelassen werden, und der Datei-Erstellungsmodus muss dem Datenmodus folgen.

File.new('t.dat', 'x')   # Raises an exception.
File.new('t.dat', 'rxb') # Raises an exception.

Ganzzahlige Zugriffsmodi

Wenn der Modus eine ganze Zahl ist, muss er eine oder mehrere der folgenden Konstanten sein, die durch den bitweisen OR-Operator | kombiniert werden können.

Beispiele

File.new('t.txt', File::RDONLY)
File.new('t.tmp', File::RDWR | File::CREAT | File::EXCL)

Hinweis: Die Methode IO#set_encoding erlaubt nicht, dass der Modus als Ganzzahl angegeben wird.

Ganzzahliger Datei-Erstellungsmodus

Diese Konstanten können auch in den Ganzzahlmodus mittels OR verknüpft werden.

Ganzzahliger Datenmodus

Der Datenmodus kann nicht als Ganzzahl angegeben werden. Wenn der Stream-Zugriffsmodus als Ganzzahl angegeben wird, ist der Datenmodus immer Text, niemals Binär.

Beachten Sie, dass es zwar eine Konstante File::BINARY gibt, deren Wert in einem ganzzahligen Stream-Modus jedoch keine Auswirkung hat; dies liegt daran, dass, wie in File::Constants dokumentiert, der Wert File::BINARY die Zeilenkonvertierung deaktiviert, aber nicht die externe Kodierung ändert.

Kodierungen

Jeder der oben genannten Zeichenkettenmodi kann Kodierungen angeben - entweder nur externe Kodierung oder sowohl externe als auch interne Kodierungen - indem ein oder beide Kodierungsnamen, getrennt durch Doppelpunkte, angehängt werden.

f = File.new('t.dat', 'rb')
f.external_encoding # => #<Encoding:ASCII-8BIT>
f.internal_encoding # => nil
f = File.new('t.dat', 'rb:UTF-16')
f.external_encoding # => #<Encoding:UTF-16 (dummy)>
f.internal_encoding # => nil
f = File.new('t.dat', 'rb:UTF-16:UTF-16')
f.external_encoding # => #<Encoding:UTF-16 (dummy)>
f.internal_encoding # => #<Encoding:UTF-16>
f.close

Die zahlreichen Kodierungsnamen sind in der Liste Encoding.name_list verfügbar.

Encoding.name_list.take(3) # => ["ASCII-8BIT", "UTF-8", "US-ASCII"]

Wenn die externe Kodierung gesetzt ist, werden gelesene Zeichenketten beim Lesen mit dieser Kodierung versehen, und geschriebene Zeichenketten werden beim Schreiben in diese Kodierung konvertiert.

Wenn sowohl externe als auch interne Kodierungen gesetzt sind, werden gelesene Zeichenketten von der externen in die interne Kodierung konvertiert, und geschriebene Zeichenketten werden von der internen in die externe Kodierung konvertiert. Weitere Details zur Transkodierung von Ein- und Ausgaben finden Sie unter Encodings.

Wenn die externe Kodierung 'BOM|UTF-8', 'BOM|UTF-16LE' oder 'BOM|UTF16-BE' ist, prüft Ruby auf eine Unicode-BOM im Eingabedokument, um die Kodierung zu ermitteln. Für UTF-16-Kodierungen muss der Dateimodus binär sein. Wenn die BOM gefunden wird, wird sie entfernt und die externe Kodierung aus der BOM verwendet.

Beachten Sie, dass die BOM-Stil-Kodierungsoption nicht zwischen Groß- und Kleinschreibung unterscheidet, sodass 'bom|utf-8' ebenfalls gültig ist.

Dateiberechtigungen

Ein File-Objekt hat Berechtigungen, eine oktale Ganzzahl, die die Berechtigungen einer tatsächlichen Datei im zugrundeliegenden System darstellt.

Beachten Sie, dass Dateiberechtigungen ganz anders sind als der Modus eines Dateistreams (File-Objekt).

In einem File-Objekt sind die Berechtigungen wie folgt verfügbar, wobei die Methode mode trotz ihres Namens die Berechtigungen zurückgibt.

f = File.new('t.txt')
f.lstat.mode.to_s(8) # => "100644"

Auf einem Unix-basierten Betriebssystem stellen die drei niedrigwertigen oktalen Ziffern die Berechtigungen für den Eigentümer (6), die Gruppe (4) und die Welt (4) dar. Das Bit-Tripel in jeder oktalen Ziffer repräsentiert jeweils Lese-, Schreib- und Ausführungsberechtigungen.

Berechtigungen 0644 stellen also Lese-/Schreibzugriff für den Eigentümer und Nur-Lesezugriff für Gruppe und Welt dar. Siehe manpages open(2) und chmod(2).

Für ein Verzeichnis ändert sich die Bedeutung des Ausführungsbits: Wenn es gesetzt ist, kann im Verzeichnis gesucht werden.

Höherwertige Bits in Berechtigungen können den Dateityp (einfach, Verzeichnis, Pipe, Socket usw.) und verschiedene andere spezielle Merkmale anzeigen.

Auf nicht-Posix-Betriebssystemen können Berechtigungen nur Lese-/Schreibzugriff umfassen, in diesem Fall ähneln die verbleibenden Berechtigungen typischen Werten. Unter Windows sind beispielsweise die Standardberechtigungen 0644; Die einzige Änderung, die vorgenommen werden kann, ist, die Datei schreibgeschützt zu machen, was als 0444 gemeldet wird.

Für eine Methode, die tatsächlich eine Datei im zugrundeliegenden System erstellt (im Gegensatz zur bloßen Erstellung eines File-Objekts), können Berechtigungen angegeben werden.

File.new('t.tmp', File::CREAT, 0644)
File.new('t.tmp', File::CREAT, 0444)

Berechtigungen können auch geändert werden.

f = File.new('t.tmp', File::CREAT, 0444)
f.chmod(0644)
f.chmod(0444)

File-Konstanten

Verschiedene Konstanten für die Verwendung in File- und IO-Methoden finden Sie im Modul File::Constants; ein Array ihrer Namen wird von File::Constants.constants zurückgegeben.

Was gibt es hier

Zuerst, was woanders ist. Klasse File

Hier bietet die Klasse File Methoden, die nützlich sind für

Erstellen

Abfragen

Pfade

Zeiten

Typen

Inhalt

Einstellungen

Sonstiges