Gibt es eine Möglichkeit, eine Datei zu erstellen und zu öffnen, wenn sie nicht existiert, aber ansonsten fehlschlägt?

8

Es sieht so aus, als ob OpenOptions dieses Szenario und eine vorhandene Datei nicht unterstützt wird entweder abgeschnitten oder überschrieben.

    
hwiechers 25.02.2016, 19:39
quelle

3 Antworten

5

Ab Rust 1.9.0 gibt es OpenOptions::create_new Damit können Sie sicher und atomar sicherstellen, dass Sie eine neue Datei erstellen und Ihr Befehl andernfalls fehlschlägt.

    
David Roundy 27.05.2017, 15:01
quelle
4

Dies ist in C11 möglich oder durch direkte Verwendung von OS-API-Funktionen auf niedriger Ebene.

Wenn Sie C11 verwenden, können Sie mit fopen die Datei im "wx" -Modus öffnen .

Andernfalls sollte unter Linux sowohl O_CREAT als auch O_EXCL an die open(3) übergeben werden Funktion. Oder übergeben Sie unter Windows CREATE_NEW an den Parameter dwCreationDisposition von CreateFile() Funktion.

BEARBEITEN: Ich habe ursprünglich die Tatsache übersehen, dass die Funktion open in C11 aktualisiert wurde.

    
Matthieu M. 26.02.2016 08:21
quelle
2

Update: Wie Mathieu David in den Kommentaren darauf hingewiesen hat. exists() aus Mit std::path::Path kann überprüft werden, ob ein Pfad existiert.

Alte Antwort:

  

In C wird normalerweise überprüft, ob ein Dateiname / Pfad existiert:

%Vor%      

access gibt 0 zurück, wenn die Datei existiert, vorausgesetzt, Sie haben die erforderlichen Berechtigungen.

     

Ich habe schnell nach einem einheimischen Rust-Äquivalent gesucht und konnte nichts finden. Daher müssen Sie sich möglicherweise auf libc::access Dafür.

    
Not Important 25.02.2016 21:15
quelle

Tags und Links