OpenOptions
, bu senaryoyu desteklemiyor gibi görünüyor ve varolan bir dosya kesilecek veya üzerine yazılacak.Bir dosya oluşturup açmak için herhangi bir yol var mı, yoksa başka türlü başarısız mı?
cevap
Pas 1.9.0'dan itibaren, yeni bir dosya oluşturduğunuzdan emin olmanızı ve atomunuzu güvenli bir şekilde sağlamanızı sağlayan OpenOptions::create_new
vardır ve komutunuz aksi halde başarısız olacaktır.
Güncelleme: Mathieu David yorumlarda dikkat çekti. Bir yolun olup olmadığını kontrol etmek için std::path::Path
numaralı telefondan exists()
kullanılabilir.
Eski Cevap:,
! access(filename, F_OK)
access
getiri 0 dosya varsa sahip olması koşuluyla:
C olarak, bir dosya adı/yol genellikle yapılır Varlığından Kontrolden eğer gerekli izinler.
Doğal bir Rust eşdeğeri için hızlı arama yaptım ve bulamadım. Bu nedenle, bunun için
libc::access
'a güvenmeniz gerekebilir.
C11'de veya doğrudan düşük düzey OS API işlevleri kullanılarak mümkündür.
C11'i kullanırsanız, fopen
dosyayı "wx"
modunda açmanıza izin verir. Aksi taktirde, Linux'ta,ve O_EXCL
öğelerini open(3)
işlevine iletmelidir. Veya, Windows'ta, CreateFile()
işlevinin dwCreationDisposition
parametresine CREATE_NEW
parametresini iletin.
DÜZENLEME: Başlangıçta open
işlevi C11 güncellenen vardı gerçeğini kaçırdım.
Özel açık mod aslında C11'e eklenmiştir. 'fopen (" wx ")' – bluss
@bluss: Lanetlenmiş, benim favori referansım (http://en.cppreference.com/w/cpp/io/c/fopen) bu x' işaretinden bahsetmiyor. –
Eğer onların *** C *** referansını kontrol ediyorsanız doğrular. Http://en.cppreference.com/w/c/io/fopen :-) – bluss
- 1. Flyway geçişlerini "sıkıştırmak" için herhangi bir yol var mı?
- 2. TabLayout'ta SpannableString'i kullanmak için herhangi bir yol var mı?
- 3. CSS'yi durdurmak için herhangi bir yol var mı?
- 4. Başka bir mvc projesinden bir mvc projesinin görünüşüne yönlendirilmek için herhangi bir yol var mı?
- 5. Bir değerin önünü açmak ve açmak için bir yol var mı?
- 6. İki seçeneği "birleştirmek" için herhangi bir yol var mı?
- 7. İşaretleme tablolarını sıralamak için herhangi bir yol var mı?
- 8. SFSafariViewController'ı UI testlerinde otomatikleştirmek için herhangi bir yol var mı?
- 9. Gözlemlenebilir bir sıcak mı yoksa soğuk mu olduğunu kontrol etmek için bir yol var mı?
- 10. Kovaryans bildirmek için bir yol var mı?
- 11. Moodle için herhangi bir API var mı?
- 12. JavaFX'te yol gradyanı oluşturmanın herhangi bir yolu var mı?
- 13. Dosya bir klasörde var mı, yoksa bulunmuyor mu?
- 14. Dosya adını `FILE *` den almak için bir yol var mı?
- 15. VB.NET kullanarak .Z dosyalarını açmak için bir kütüphane var mı?
- 16. Sayfamı beğenen kişileri göstermek için facepile bir yol var mı
- 17. Elliot Haughin'in CodeIgniter için Twitter kütüphanesi var mı yoksa başka var mı?
- 18. Elixir'de bir fonksiyonun kontrol edilmesi için bir yol var mı?
- 19. Scala için silme işleminin herhangi bir avantajı var mı?
- 20. Filezilla'dan Vim konsoluna dosya açmak mı istiyorsunuz?
- 21. "Vurgulu" kodun herhangi bir yolu var mı?
- 22. Bir belgeyi kapattığınızda tanımlara otomatik olarak daraltmak için herhangi bir yol var mı?
- 23. SASS'de bir dersi “genişletmek” için bir yol var mı?
- 24. Bir bileşenin durumunu farklı bir bileşenden değiştirebilmem için herhangi bir yol var mı?
- 25. - akıllı mı yoksa aptal mı?
- 26. datetime.datetime var mı yoksa Yok
- 27. Her döngü için paralel olması için bir yol var mı?
- 28. ImageMagick. Derlemek ve çalıştırmak için herhangi bir yolu var mı?
- 29. Bir inşaat demiri klonlamadan önce yerel bir önbelleği kontrol etmek için herhangi bir yol var mı?
- 30. Normal bir ifadede bir Golang dizesinden kaçmak için herhangi bir yol var mı?
Bir yarış koşulu burada gerçekleşebilir, burada dosya 'access''ten sonra ama' open''den önce var olur mu? – Shepmaster
@Shepmaster Evet. Ve bu konuda Coverity Scan uyarısı gördüğümü düşünüyorum. Ama alternatif nedir? –
Neden güvenli olmayan bir işlev kullanmanız gerekiyor? Bir yolun ['var()'] ile (https://doc.rust-lang.org/std/path/struct.Path.html#method.exists) var olup olmadığını kontrol edebilir ve daha sonra dosyayı oluşturmazsa oluşturabilirsiniz. 't. –