Loading...
 

Dateien und Ordner in Crystal


Neue Datei oder neuen Ordner erstellen

Textdatei erstellen


Dateien im Textformat sind dazu da, den Inhalt für den Menschen lesbar darzustellen. Neben den 'normalen' druckbaren Zeichen gibt es aus noch Steuerzeichen wie Zeilenumbruch, Tab usw.

Der folgende Code erzeugt die Datei 'outputfile.txt'. Der Parameter "w+" bewirkt, dass eine vorhandene Datei überschrieben wird.

file = File.new("outputfile.txt", "w+")   # erstellt die Datei "outputfile.txt" zum Lesen und Schreiben
file.print("Erste Zeile")                 # schreibt "Erste Zeile" in die erste Zeile
file.close                                # schliessen der Datei; erst jetzt ist die Datei wirklich lesbar


Um den Dateiinhalt anzuzeigen kann man bei Linux in der Kommandozeile folgendes eingeben

cat outputfile.txt


Weitere Modi:

Mode       | Description
-----------+------------------------------------------------------
r rb       | Read-only, starts at the beginning of the file.
r+ r+b rb+ | Read-write, starts at the beginning of the file.
w wb       | Write-only, truncates existing file to zero length or
           | creates a new file if the file doesn't exist.
w+ w+b wb+ | Read-write, truncates existing file to zero length or
           | creates a new file if the file doesn't exist.
a ab       | Write-only, all writes seek to the end of the file,
           | creates a new file if the file doesn't exist.
a+ a+b ab+ | Read-write, all writes seek to the end of the file,
           | creates a new file if the file doesn't exist.


Binärdatei erstellen


Dateien im Binärformat werden dazu benutzt beliebige Bitmuster abzuspeichern. Will man sich den Inhalt einer solchen Datei manuell ansehen, benutzt man üblicherweise einen sog. Hex-Editor. HxD ist ein solider Freeware Editor (Herstellerseite).

Bei dem kleinen Beispiel handelt es sich um beliebiege Daten. Der angegebene Header ist für eine gültige Datei von keiner Bedeutung. Es soll nur verdeutlicht werden, wie die Bytes in der Datei aneinandergereit werden. Wer genau hinschaut, wird feststellen, dass die UInt32 Angabe in der Datei vom niedriegsten zum höchstwertigsten Byte geschrieben wurde.

# Header belegen
header = 0x76543210_u32

# Array anlegen
arr = [] of UInt8 
arr << 0xFF
arr << 0x0A
arr << 0x01
arr << 0xFE
arr << 0x04
arr << 0x10

# Funktion zum Schreiben aufrufen
write_file(header, arr)

# Funktion zum Schreiben der Binärdatei
def write_file(header, arr)
    # Datei anlegen
    file = File.new("testfile.bin", "wb")
    
    # Header schreiben
    file.write_bytes(header)

    # Das Array schreiben
    xi = 0
    while xi < arr.size
        file.write_bytes(arr[xi])
        xi += 1
    end

    # Datei schliessen
    file.close
end

Dateiinhalt mit einem Hexeditor ausgelesen:
10 32 54 76 FF 0A 01 FE 04 10


Verzeichnis erstellen


Manchmal braucht man auch einen neune Ordner.

# Neuen Ordner erstellen
dir.mkdir("newfolder")


Textdatei lesen

Komplette Datei in einem Rutsch lesen.

# Datei zum Lesen öffnen "r"
# Bitte das große "F" beachten
datei = File.new("readme.txt", "r")

# Kompletten Inhalt der Datei in eine Variable speichern
content = datei.gets_to_end

# Datei schliessen
datei.close

# Inhalt ausgeben
puts content


Das obige Beispiel kann man auch kürzer erledigen.

# Datei zum Lesen öffnen
content = File.read("readme.txt")

# Inhalt ausgeben
puts content


Dateiinhalt zeilenweise lesen und in ein Array speichern. Anschließend geben wir das Array elemenweise aus.

# Datei zum Lesen öffnen und Inhalt in ein Array speichern.
content = File.read_lines("readme.txt")

# Array durchlaufen und Inhalt ausgeben
content.each do |zeile|
    puts zeile
end


Weiterführende Informationen

Crystal-Lang Doku