2011-06-10 16 views
19

İlgili: fclose return value check bir dosya okurken (floş operasyon başarısız olması durumunda) Bir dosya yazıyorsanız eğer, fclose() dönüş değerini kontrol etmek önemlidir bunu yapmak için gerekli olmasına rağmenSadece dosya okuyorsam fclose() işlevinin dönüş durumunu kontrol etmem gerekiyor mu?

?

FILE *f = fopen(path, "r"); 
if (f == NULL) 
    return 0; 

/* Do something with the file... */ 

if (fclose(f) != 0) { 
    /* Error closing a file we successfully read. */ 
    return 0; 
} 
+2

Okumanız gereken verilerin ne kadar önemli olduğuna bağlıdır. Fclose() işlevi başarısız olursa, okuma sırasında da bir sorun oluşması muhtemeldir - belki de dosya akışı yapısı üzerinde bir şeyler çiğnendiği için. Bu durumda, olması gereken tüm verileri okumamış olabilirsiniz ve verilerin bir kısmına dayalı bir cevap üretmeniz bir sorun olabilir. Birçok kişi bu kontrolü yapmak için kodu yazar mı? Yok hayır; Bir çok insan yakınların başarılı olduğunu kontrol etmiyor. Ancak bunun nedeni, işlenmekte olan verilerin kritik olmamasıdır. –

+1

@Jonathan, eğer fread hataları döndürmezse, neden farklı bir sistem çağrısının başarısız olmasından dolayı bir hata olduğunu farz edersiniz? Okumak için açılmış bir dosyanın neden kapanmayacağını hayal bile edemiyorum, fakat eğer böyle bir şey olursa - aslında başarısız olan bir geri dönüşü olmayan önceki bir aramanın başarısız olduğunu düşünemezsiniz. Bana çok şey ifade etmiyor. – littleadv

+0

@littleadv: Okuma başarısız mı, yoksa EOF'ye mi eriştiğini 'feof (fp)' vs 'ferror (fp)' kullanarak mı kontrol ettiniz? Genelde bunu yapmam; Ben de azınlıkta olduğumu düşünmüyorum. Haklısın; Eğer önceki tüm okumalar başarılı olursa ve son okumada bir hata değil de EOF olduğunu doğruladıysanız, o zaman fclose() 'nin başarısız olacağı oldukça olası değildir. Olabilir, ama bu muhtemel değildir. Ve fclose() 'nın başarısız olmasının en olası nedenlerinden bahsetmiştim, bir şekilde biçim veya biçimdeki bellek sıkışması veya dosya işaretçisinin birtakım yanlış yönetilmesi (aslında açtığınız dosyayı kapatmama). Kesinlikle olası değil. –

cevap

10

Başarısız olursa yapabileceğiniz bir şey var mı? O zaman evet. Yapabileceğin bir şey yoksa - bunu görmezden gelebilirsin.

İyi bir uygulama, her zaman hatalar olup olmadığını kontrol etmektir ve en azından bunu yapabileceğiniz başka bir şey yoksa, bunları günlüğe kaydetmeniz gerekir.

0

Kapat() başarısız olursa, önemsediğiniz bir hatayla karşılaşabilirsiniz. Dosyalar veriden daha fazlasıdır. Bunlar meta veriler ve bunlar kaynaklar. Close() başarısız olursa, hala bir dosya tanıtıcınız olabilir. Dosyanın verilerini sabitleyerek dosya sistemi tarafından yeniden kullanılmasını engelleyebilirsiniz. Hala ağ bağlantılarınız açık olabilir. Dosyanın atimi close() ile güncellenirse, dosya için eski bir atınız olacaktır. Bunlar gerçekten merak etmeniz gereken şeyler.

İlgili konular