programmieren-in-rust/aufgaben/sheet07/task4/README.md
2017-02-16 15:12:56 +01:00

1.9 KiB
Executable File

Aufgabe 4: Kopierbefehl

(In dieser Aufgabe geht es nicht mehr unbedingt nur um Iteratoren!)

In dieser Aufgabe sollt ihr den cp Befehl nachprogrammieren ... Ok, nur einen Teil davon. Euer Programm soll zwei Dateinamen als command line parameter erhalten und dann von der einen Datei in die andere kopieren:

$ mycp Cargo.toml Peter.toml

Euer Programm soll also mycp heißen! Wenn ihr es richtig gemacht habt, könnt ihr mit dem Befehl cargo install euer Programm global auf eurem System installieren (die Executable wird in ~/.cargo/bin kopiert, welches im $PATH ist). Damit ihr es aber nicht immer neu installieren müsst, um es auszuprobieren, könnt ihr es aber natürlich mit cargo run testen. Die Kommandozeilenparameter werden nach den -- übergeben:

$ cargo run -- Cargo.toml Peter.toml

Die Hauptschritte zur Implementation sind folgende:

a) Parsen der Kommandozeilenparameter

Diese müssen zunächst eingelesen werden und auf Gültigkeit überprüft werden (richtige Anzahl?). Dies soll in einer eigenen Funktion geschehen, in der keine Ausgabe auf dem Terminal geschehen soll. Alle Informationen müssen im Rückgabewert kodiert sein.

Hierzu ist sicherlich das std::env Modul interessant.

b) Kopieren des Dateiinhalts

Falls die Parameter korrekt waren, muss jetzt von einer Datei in die andere kopiert werden. Das soll ebenfalls in einer eigenen Funktion passieren, welche keine Ausgaben auf dem Terminal macht.

Dabei sollten natürlich auch Fehler behandelt werden. Das heißt aber nicht, dass ihr selber viel Code programmieren müsst; wahrscheinlich ist die Implementierung kürzer, als ihr anfangs vermuten würdet.

Wie man schon vermutet, wird hier das std::io Modul eine Rolle spielen. Nur die Funktion std::fs::copy() dürft ihr nicht nutzen! Das wäre ja zu einfach ;-)