İ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;
}
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. –
@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
@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. –