Ich versuche, das gleiche std::fs::File
Objekt zum Schreiben und Lesen zu verwenden, aber das Lesen gibt eine leere Zeichenfolge zurück.Ist es möglich, dieselbe Datei zum Lesen und Schreiben zu verwenden?
Ich habe versucht, flush
, sync_all
und seek
, aber nichts half. Mit einem neuen File
Objekt kann ich die Datei einfach lesen.
const FILE_PATH: &str = "test.txt";
// Create file
let mut f = std::fs::File::create(FILE_PATH).unwrap();
f.write_all("foo bar".as_bytes());
f.seek(std::io::SeekFrom::Start(0));
// Read from the same descriptor
let mut content = String::new();
f.read_to_string(&mut content);
println!("{:?}", content); // -> ""
// Read from the other descriptor
let mut f = std::fs::File::open(FILE_PATH).unwrap();
let mut content = String::new();
f.read_to_string(&mut content);
println!("{:?}", content); // -> "foo bar"
Sie haben nicht mit/log/unwrap eines der '' 'Ergebnisse bearbeitet, was wahrscheinlich das Problem gezeigt hätte. Ignoriere die Compiler-Warnungen nicht! – Stefan
Danke für den Hinweis @Stefan! Sie haben Recht, im realen Programm sollten wir die Warnungen des Compilers beachten. Aber dieses Stück Code wurde nur benötigt, um das Problem klar und ohne störende Details zu zeigen. –
Wenn ich das "read_to_string" -Ergebnis entpacke, bekomme ich einen "Bad file descriptor" -Fehler - was mir sagt, dass es einfach nicht von ihm lesen will, egal was die 'flush',' sync_all' und 'seek' Aufrufe sind. Die Fehler nicht auszupacken und dann über das Ergebnis nachzudenken ist in meinen Augen "keine Forschungsanstrengungen". In einem realen Programm sollten Sie also die Fehler behandeln, in Beispielen sollten Sie zumindest das Ergebnis entpacken. – Stefan