Video: Learn Python - Full Course for Beginners [Tutorial] 2024
Bir dosyayı açtığınızda, her şey ters gidebilir. Bir dosya fiziksel bir aygıtta yaşıyor - sabit bir disk, örneğin flash sürücü veya SD kartı - ve fiziksel aygıtlarla çalışırken sorun yaşayabilirsiniz.
Örneğin, diskin bir kısmı hasar görebilir ve mevcut bir dosyanın bozulmasına neden olabilir. Ya da, felaketten daha az, disk alanınız tükenebilir. Veya, daha felaket olsa bile, mevcut olmayan bir dizinde bir dosya açmaya çalışabilirsiniz.
Eğer bir dosyayı bir tam yol ve dosya adı belirterek açmaya çalışırsanız fakat dizin yoksa, bilgisayar kullandığınız işletim sistemine bağlı olarak farklı tepki verir. Belirli işletim sisteminizin nasıl yanıt vereceğinden emin değilseniz, / abc / def / ghi / jkl / abc gibi bir şey oluşturup açmaya çalışan basit bir test uygulaması yazmayı deneyin. Txt. (Tabii ki, bulunmayan bir dizini kullandığınızdan emin olmak istersiniz.)
Sonra iki şeyden biri gerçekleşir: Ya dizin ve dosya oluşturulur ya da hiçbir şey olmaz.
Örneğin, bir Windows sisteminde, mevcut olmayan bir dizinde bir dosya oluşturmaya çalışırsak, sistem dizini oluşturmaz. Bunun nedeni, derinlemesine içeride, uygulama sonunda dosyayı oluşturmanın kirli işi yapan bir işletim sistemi işlevi çağırıyor. Ve bu özel işletim sistemi işlevi (buna bile bakarsanız CreateFile () denir) sizin için bir dizin oluşturmayacağına dair bir kurala sahiptir.
ostream sınıfının bir dosya oluşturamadığını belirlemek istiyorsanız, fail () üye işlevini çağırabilirsiniz. Nesne dosyası oluşturamazsa, bu işlev true değerini döndürür. Ve bir dizin yok olduğunda ne olur. Gösterilen DirectoryCheck01 örneği bunun bir örneğini göstermektedir.
#include #include ad alanı std kullanarak; int main () {outstream dosyası ("/ abc / def / ghi / MyFile. txt"); if (outfile. fail ()) {cout << "dosyası açılamadı!" << endl; return 0;} çıktı dosyası << "merhaba" << endl; ÇıkışDosyası. kapat(); return 0;}
Bu kodu çalıştırdığınızda, sisteminizde / abc / def / ghi adlı bir dizin bulunmadığını varsayarsak, iletiyi açamadı iletisini görmelisiniz! Belirli işletim sisteminizin bu durumda bir dizin oluşturmadığını varsayarsak; Eğer varsa, bilgisayarınız dosyayı açar, ona yazarsınız ve işleri kapattıktan sonra mutlu bir hayat sürdürecektir.
Fail () üye işlevinin çağrılmasına alternatif olarak, çeşitli akış sınıflarında bulunan bir operatör kullanabilirsiniz. Bu!, sevimli bir şekilde "patlama" operatörü olarak anılır ve bunu, bu kodda olduğu gibi, fail () işlevini çağırmak yerine kullanabilirsiniz:
if (!outfile) {cout << "dosyası açılamadı!" << endl; return 0;}
Çoğu kişi kullanmayı tercih eder! outfile yerine outfile. başarısız ol (), olsa da! outfile kafa karıştırıcı kodu yapar. Nedeni outfile bir nesne ve kavramıdır! Dışkı sadece anlam ifade etmiyor.
Aslında! outfile birçok başlangıçtaki programcıya gider. Outfile'in bu örnek kodda bir gösterici olmadığını biliyorlar ve normalde yalnızca bir işaretçi ile yapabileceği şekilde 0'a karşı nasıl test edebileceğinizi merak ediyorlar. (Hatırlayın! X, burada x işaretçidir, x değerini 0 olarak test edersiniz.) Ve bu mantıklı değil! Ve böylece, karışıklığı önlemek için, sadece fail () 'i çağırın. Daha mantıklı.
Dosyanızın yaratılmasının bazı nedenleri olabilir:
-
Dizin yok.
-
Disk alanınız tükendi ve şansınız yok.
-
Uygulamanızda bir dosya oluşturmak için doğru izinlere sahip değilsiniz.
-
Dosya adı geçersiz - başka bir deyişle, işletim sisteminin dosya adı olarak * veya? Gibi izin vermediği karakterler içeriyor..
Başarılı bir uygulama gibi, uygulamanız da iki şey yapmalıdır:
-
1. Dosya oluşturma işleminin başarılı olup olmadığını kontrol edin.
-
2. Dosya oluşturma başarısız olursa, uygun şekilde işleme koyun.
Afedersiniz gibi korkunç bir mesaj yazmayın! Durduruluyor!, zavallı kullanıcılarınıza monitörü yere yatırmaktan başka seçeneği dokunmadan bırakıyorsunuz. Bunun yerine, dostça bir şeyler yapın - onlara bir sorun olduğunu bildiren bir mesaj sunmak ve daha fazla disk alanı boşaltmalarını önermek gibi.