2010-09-26 29 views
7

Bir klasöre yazma iznim olup olmadığını nasıl kontrol edeceğimi öğrenmek istiyorum.Windows/Linux'ta dosya yazma izinlerini kontrol edin

Bir C++ projesi yazıyorum ve bazı verileri bir sonuç.txt dosyasına yazdırmalıyım, ancak izinlerim olup olmadığını bilmem gerekiyor.

Çek ve Linux arasındaki fark nedir? Çünkü projem Linux üzerinde çalışmalı ve şu anda Visual Studio'da çalışıyorum.

cevap

8

İzinleri denetlemenin taşınabilir yolu, dosyayı açıp başarılı olup olmadığını kontrol etmektir. . Aksi takdirde, errno (başlığındaki <cerrno> den sonra yeterli izinlere yoktu [tek S ile, evet] değerine EACCES ayarlandığında Bu Unix/Linux ve Windows hem çalışması gerekir Örnek stdio için:.

FILE *fp = fopen("results.txt", "w"); 
if (fp == NULL) { 
    if (errno == EACCES) 
     cerr << "Permission denied" << endl; 
    else 
     cerr << "Something went wrong: " << strerror(errno) << endl; 
} 

Iostreams AFAIK, ikisi de platformlarda errno ayarlayabilir ya da yalnızca "başarısızlık" yerine daha özel hataları bildirmek için garanti etmiyoruz. biraz farklı çalışır. Jerry Tabut yazdığı gibi

, ayrı erişim güvenmeyin Programınız test programından beri yarışa eğilimli olacak koşullar ve güvenlik delikleri.

+0

Teşekkürler, ancak diske dosya yazma iznim olup olmadığını nasıl bilebilirim? – Aviadjo

+0

Eğer denemeye izinliyim ve programım varsa, programın çökeceğini ve daha önce kontrol ederek bunu önlemek istiyorum. diske yazma izinlerini kontrol etmek için herhangi bir komut var mı (yeni bir dosya yazıyor)? – Aviadjo

+2

Programınız neden çökmelidir? : S –

5

Yapılması gereken tek şey, dosyayı oluşturmaya çalışmaktır ve başarısız olursa, kullanıcıya bir sorun olduğunu söyleyin. Önceden sınamaya yönelik herhangi bir girişimde bulunup, yalnızca dosyayı oluşturup yazabilmeniz için dosya oluşturmaya çalışmak, yarış koşullarından kaynaklanan sorunlara açık (denetlediğinizde izniniz vardı, ancak denediğiniz zaman kaldırıldı) veya bunu kullanmak için (veya tersi) ve köşe durumları (örneğin, bu dizinde bir dosya oluşturmak için izniniz var, ancak burada yazma girişiminde disk kotanız aşmayacak). Bunu bilmenin tek yolu ...

3

Dosya yazma iznini test etmenin en doğru yolu, dosyaya yazmayı denemektir. Bunun nedeni, farklı platformların yazma izinlerini çok farklı şekillerde ortaya çıkarmasıdır. Daha da kötüsü, işletim sistemi bir dosyaya yazabileceğinizi (veya yapamayacağınız) söyleyebildiğinden, örneğin bir unix sisteminde, dosya modları yazılamaya izin verebilir, ancak dosya sadece okunabilir. Medya, ya da tersine, dosya aslında kendi işlemleri için çekirdek tarafından oluşturulmuş bir karakter aygıtı olabilir, bu yüzden kendi filemodes tüm sıfırlar için ayarlanmış olsa bile, çekirdek bu süreci (ve yalnızca bu işlem) ile muck için izin verir hepsi sever.

İlgili konular