Rust - Dateieingabe / -ausgabe
Neben dem Lesen und Schreiben auf der Konsole ermöglicht Rust das Lesen und Schreiben in Dateien.
Die Dateistruktur repräsentiert eine Datei. Es ermöglicht einem Programm, Lese- / Schreibvorgänge für eine Datei auszuführen. Alle Methoden in der Dateistruktur geben eine Variante der io :: Result-Enumeration zurück.
Die häufig verwendeten Methoden der Dateistruktur sind in der folgenden Tabelle aufgeführt:
Sr.Nr. | Modul | Methode | Unterschrift | Beschreibung |
---|---|---|---|---|
1 | std :: fs :: File | öffnen() | pub fn open <P: AsRef> (Pfad: P) -> Ergebnis | Mit der Methode open static kann eine Datei im schreibgeschützten Modus geöffnet werden. |
2 | std :: fs :: File | erstellen() | pub fn create <P: AsRef> (Pfad: P) -> Ergebnis | Die statische Methode öffnet eine Datei im Nur-Schreib-Modus. Wenn die Datei bereits vorhanden war, wird der alte Inhalt zerstört. Andernfalls wird eine neue Datei erstellt. |
3 | std :: fs :: remove_file | Datei löschen() | pub fn remove_file <P: AsRef> (Pfad: P) -> Ergebnis <()> | Entfernt eine Datei aus dem Dateisystem. Es gibt keine Garantie dafür, dass die Datei sofort gelöscht wird. |
4 | std :: fs :: OpenOptions | append () | pub fn append (& mut self, append: bool) -> & mut OpenOptions | Legt die Option für den Anhänge-Modus der Datei fest. |
5 | std :: io :: Writes | write_all () | fn write_all (& mut self, buf: & [u8]) -> Ergebnis <()> | Versuche, einen gesamten Puffer in diesen Schreibvorgang zu schreiben. |
6 | std :: io :: Read | read_to_string () | fn read_to_string (& mut self, buf: & mut String) -> Ergebnis | Liest alle Bytes bis EOF in dieser Quelle und hängt sie an buf an. |
In eine Datei schreiben
Sehen wir uns ein Beispiel an, um zu verstehen, wie eine Datei geschrieben wird.
Das folgende Programm erstellt eine Datei 'data.txt'. Mit der Methode create () wird eine Datei erstellt. Die Methode gibt ein Dateihandle zurück, wenn die Datei erfolgreich erstellt wurde. Die Funktion write_all in der letzten Zeile schreibt Bytes in die neu erstellte Datei. Wenn eine der Operationen fehlschlägt, gibt die Funktion expected () eine Fehlermeldung zurück.
use std::io::Write;
fn main() {
let mut file = std::fs::File::create("data.txt").expect("create failed");
file.write_all("Hello World".as_bytes()).expect("write failed");
file.write_all("\nTutorialsPoint".as_bytes()).expect("write failed");
println!("data written to file" );
}
Ausgabe
data written to file
Aus einer Datei lesen
Das folgende Programm liest den Inhalt einer Datei data.txt und druckt ihn auf der Konsole aus. Mit der Funktion "Öffnen" wird eine vorhandene Datei geöffnet. Ein absoluter oder relativer Pfad zur Datei wird als Parameter an die Funktion open () übergeben. Die Funktion open () löst eine Ausnahme aus, wenn die Datei nicht vorhanden ist oder aus irgendeinem Grund nicht zugänglich ist. Wenn dies erfolgreich ist, wird der Variablen "file" ein Dateihandle für eine solche Datei zugewiesen.
Die Funktion "read_to_string" des Handles "file" wird verwendet, um den Inhalt dieser Datei in eine Zeichenfolgenvariable einzulesen.
use std::io::Read;
fn main(){
let mut file = std::fs::File::open("data.txt").unwrap();
let mut contents = String::new();
file.read_to_string(&mut contents).unwrap();
print!("{}", contents);
}
Ausgabe
Hello World
TutorialsPoint
Löschen Sie eine Datei
Im folgenden Beispiel wird die Funktion remove_file () verwendet, um eine Datei zu löschen. Die Funktion expected () gibt eine benutzerdefinierte Nachricht zurück, falls ein Fehler auftritt.
use std::fs;
fn main() {
fs::remove_file("data.txt").expect("could not remove file");
println!("file is removed");
}
Ausgabe
file is removed
Daten an eine Datei anhängen
Die Funktion append () schreibt Daten an das Ende der Datei. Dies wird im folgenden Beispiel gezeigt -
use std::fs::OpenOptions;
use std::io::Write;
fn main() {
let mut file = OpenOptions::new().append(true).open("data.txt").expect(
"cannot open file");
file.write_all("Hello World".as_bytes()).expect("write failed");
file.write_all("\nTutorialsPoint".as_bytes()).expect("write failed");
println!("file append success");
}
Ausgabe
file append success
Kopieren Sie eine Datei
Im folgenden Beispiel wird der Inhalt einer Datei in eine neue Datei kopiert.
use std::io::Read;
use std::io::Write;
fn main() {
let mut command_line: std::env::Args = std::env::args();
command_line.next().unwrap();
// skip the executable file name
// accept the source file
let source = command_line.next().unwrap();
// accept the destination file
let destination = command_line.next().unwrap();
let mut file_in = std::fs::File::open(source).unwrap();
let mut file_out = std::fs::File::create(destination).unwrap();
let mut buffer = [0u8; 4096];
loop {
let nbytes = file_in.read(&mut buffer).unwrap();
file_out.write(&buffer[..nbytes]).unwrap();
if nbytes < buffer.len() { break; }
}
}
Führen Sie das obige Programm als main.exe data.txt datacopy.txt aus . Beim Ausführen der Datei werden zwei Befehlszeilenargumente übergeben -
- der Pfad zur Quelldatei
- die Zieldatei