mirror of
https://github.com/LukasKalbertodt/programmieren-in-rust.git
synced 2024-11-18 10:58:57 +01:00
41 lines
1.9 KiB
Markdown
Executable File
41 lines
1.9 KiB
Markdown
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](https://doc.rust-lang.org/std/env/index.html) 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](https://doc.rust-lang.org/std/io/index.html) eine Rolle spielen.
|
|
Nur die Funktion `std::fs::copy()` dürft ihr **nicht** nutzen! Das wäre ja zu einfach ;-)
|