class Pathname

pathname.rb

Objektorientierte Pathname Klasse

Autor

Tanaka Akira <akr@m17n.org>

Dokumentation

Autor und Gavin Sinclair

Für Dokumentation siehe Klasse Pathname.

Pathname repräsentiert den Namen einer Datei oder eines Verzeichnisses im Dateisystem, aber nicht die Datei selbst.

Der Pfadname hängt vom Betriebssystem ab: Unix, Windows, etc. Diese Bibliothek arbeitet mit Pfadnamen des lokalen Betriebssystems, jedoch werden nicht-Unix-Pfadnamen experimentell unterstützt.

Ein Pathname kann relativ oder absolut sein. Erst wenn versucht wird, auf die Datei zu verweisen, spielt es eine Rolle, ob die Datei existiert oder nicht.

Pathname ist unveränderlich. Er hat keine Methode zur destruktiven Aktualisierung.

Das Ziel dieser Klasse ist es, Datei-Pfadinformationen auf eine übersichtlichere Weise zu manipulieren, als es das Standard-Ruby bietet. Die folgenden Beispiele demonstrieren den Unterschied.

Alle Funktionalitäten von File, FileTest und einige von Dir und FileUtils sind auf überraschende Weise enthalten. Es ist im Wesentlichen eine Fassade für all diese und mehr.

Beispiele

Beispiel 1: Verwendung von Pathname

require 'pathname'
pn = Pathname.new("/usr/bin/ruby")
size = pn.size              # 27662
isdir = pn.directory?       # false
dir  = pn.dirname           # Pathname:/usr/bin
base = pn.basename          # Pathname:ruby
dir, base = pn.split        # [Pathname:/usr/bin, Pathname:ruby]
data = pn.read
pn.open { |f| _ }
pn.each_line { |line| _ }

Beispiel 2: Verwendung von Standard-Ruby

pn = "/usr/bin/ruby"
size = File.size(pn)        # 27662
isdir = File.directory?(pn) # false
dir  = File.dirname(pn)     # "/usr/bin"
base = File.basename(pn)    # "ruby"
dir, base = File.split(pn)  # ["/usr/bin", "ruby"]
data = File.read(pn)
File.open(pn) { |f| _ }
File.foreach(pn) { |line| _ }

Beispiel 3: Spezielle Funktionen

p1 = Pathname.new("/usr/lib")   # Pathname:/usr/lib
p2 = p1 + "ruby/1.8"            # Pathname:/usr/lib/ruby/1.8
p3 = p1.parent                  # Pathname:/usr
p4 = p2.relative_path_from(p3)  # Pathname:lib/ruby/1.8
pwd = Pathname.pwd              # Pathname:/home/gavin
pwd.absolute?                   # true
p5 = Pathname.new "."           # Pathname:.
p5 = p5 + "music/../articles"   # Pathname:music/../articles
p5.cleanpath                    # Pathname:articles
p5.realpath                     # Pathname:/home/gavin/articles
p5.children                     # [Pathname:/home/gavin/articles/linux, ...]

Aufschlüsselung der Funktionalität

Kernmethoden

Diese Methoden manipulieren im Wesentlichen einen String, da ein Pfad nichts anderes ist. Keine dieser Methoden greift auf das Dateisystem zu, außer mountpoint?, children, each_child, realdirpath und realpath.

Prädikatmethoden für den File-Status

Diese Methoden sind eine Fassade für FileTest

Eigenschafts- und Manipulationsmethoden für File

Diese Methoden sind eine Fassade für File

Verzeichnismethoden

Diese Methoden sind eine Fassade für Dir

Dienstprogramme

Diese Methoden sind eine Mischung aus Find, FileUtils und anderen

Methodendokumentation

Wie der obige Abschnitt zeigt, sind die meisten Methoden in Pathname Fassaden. Die Dokumentation für diese Methoden sagt im Allgemeinen nur, zum Beispiel, „Siehe FileTest.writable?“, da Sie die Originalmethode ohnehin kennen sollten und deren Dokumentation (z. B. über ri) weitere Informationen enthält. In einigen Fällen folgt eine kurze Beschreibung.