mirror of
https://github.com/LukasKalbertodt/programmieren-in-rust.git
synced 2025-06-29 00:07:31 +02:00
Rename sheet folders to assure proper sorting
This commit is contained in:
40
aufgaben/sheet07/task4/README.md
Executable file
40
aufgaben/sheet07/task4/README.md
Executable file
@ -0,0 +1,40 @@
|
||||
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 ;-)
|
Reference in New Issue
Block a user