C programcısının bir metin dosyasını veya ikili dosyayı nasıl oluşturduğunu, açtığını ve kapattığını açıklar.
Dosya, bir metin dosyası ya da ikili dosya olsun, bir dizi bayt anlamına gelir. C Dili, yalnızca üst düzey işlevlere erişim sağlamakla kalmaz, aynı zamanda depolama aygıtındaki dosyaları işlemek için temel (OS) çağrıyı da sağlar. . Bu bölümde belge yönetimindeki önemli çağrılar açıklanacaktır.
açık dosya
Genellikle yeni bir dosya oluşturmak veya mevcut bir dosyayı açmak için fopen () işlevini kullanan bu çağrı, akışı kontrol etmek için gerekli tüm bilgileri içeren FILE türünde bir nesneyi başlatır. İşte bu işlev çağrısının prototipi:
DOSYA *fopen ( const char *dosya adı, const char *mode);
Burada dosya adı bir dosyayı adlandırmak için kullanılan bir dizedir; erişim modunun değeri aşağıdaki değerlerden biri olabilir:
model | Tanım |
r | Okunmasına izin veren mevcut bir metin dosyasını açın. |
w | Dosyaya yazmaya izin veren bir metin dosyası açın. Dosya mevcut değilse yeni bir dosya oluşturulur. Burada programınız içeriği dosyanın başından itibaren yazar. Dosya mevcutsa sıfır uzunluğa kesilecek ve yeniden yazılacaktır. |
a | Bir metin dosyası açın ve dosyaya ekleme modunda yazın. Dosya mevcut değilse yeni bir dosya oluşturulur. Burada programınız içeriği zaten sahip olduğunuz dosyalara ekler. |
r+ | Dosyayı okumanıza ve yazmanıza olanak tanıyan bir metin dosyası açın. |
w+ | Dosyayı okumanıza ve yazmanıza olanak tanıyan bir metin dosyası açın. Dosya zaten mevcutsa, dosya sıfır uzunluğa kısaltılır ve dosya mevcut değilse yeni bir dosya oluşturulur. |
a+ | Dosyayı okumanıza ve yazmanıza olanak tanıyan bir metin dosyası açın. Dosya mevcut değilse yeni bir dosya oluşturulur. Okuma dosyanın başlangıcında başlar ve yazma yalnızca ekleme modunda yapılır. |
İkili dosya işlenmişse yukarıdakileri değiştirmek için aşağıdaki erişim modunu kullanın:
"rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b"
kapalı dosya
Dosyayı kapatmak için lütfen fclose() işlevini kullanın. Fonksiyonun prototipi aşağıdaki gibidir:
int fclose (DOSYA *fp);
- Dosya başarılı bir şekilde kapatılırsa, fclose() işlevi sıfır değerini döndürür ve hata durumunda EOF değerini döndürür. Bu işlev aslında verileri arabellekten kaldırır, dosyayı kapatır ve o dosya için kullanılan tüm belleği serbest bırakır. EOF, stdio.h başlık dosyasında tanımlanan bir sabittir.
C standart kütüphanesi, dosyaları karakterlere göre veya sabit uzunlukta bir dize olarak okumak ve yazmak için çeşitli işlevler sağlar.
Dosyaya yaz
Akışa karakter yazmak için en basit işlevler şunlardır:
int fputc ( int c , FILE *fp );
fputc() işlevi, c parametresinin karakter değerini fp'nin işaret ettiği çıkış akışına yazar. Yazma başarılı olursa, yazılı karakteri ve bir hata oluşması durumunda EOF'yi döndürür. Akışa null ile biten bir dize yazmak için aşağıdaki işlevi kullanabilirsiniz:
int fputs ( const char *s , FILE *fp );
fputs () işlevi, s dizesini fp'nin işaret ettiği çıkış akışına yazar. Yazma başarılı olursa negatif olmayan bir değer ve bir hata oluşursa EOF değerini döndürür. Ayrıca dosyaya bir dize yazan int fprintf (FILE * fp, const char * format,...) işlevini de kullanabilirsiniz. Aşağıdaki örneği deneyin:
Not: Kullanılabilir bir tmp dizininizin olduğundan emin olun, yoksa önce bilgisayarınızda oluşturmanız gerekir.
/ tmp genellikle Linux sistemindeki geçici bir dizindir. Windows sisteminde çalıştırıyorsanız, onu yerel ortamda mevcut bir dizine değiştirmeniz gerekir, örneğin: C:\tmp, D:\tmp, vb.
canlı örnek
#katmak
Yukarıdaki kod derlenip çalıştırıldığında /tmp dizininde yeni bir test.txt dosyası oluşturur. Ve iki farklı fonksiyonu kullanarak iki satıra yazar. Şimdi bu dosyayı okuyalım.
Dosyayı oku
Bir dosyadan tek bir karakteri okumak için en basit işlev aşağıdadır:
int fgetc (DOSYA * fp);
fgetc () işlevi, giriş dosyasından fp'nin işaret ettiği bir karakteri okur. Dönüş değeri, okunan karakter ve bir hata oluşması durumunda EOF'dir. Aşağıdaki işlev bir akıştan bir dize okumanıza olanak tanır:
char *fgets ( char *buf, int n, FILE *fp);
fgets () işlevi, fp tarafından yönlendirilen giriş akışından n-1 karakter okur. Okuma dizesini arabellek arabelleğine kopyalar ve dizeyi sonlandırmak için sonuna bir boş karakter ekler.
Bu işlev, son karakteri okumadan önce kesikli bir satır karakteri '\ n' veya dosya sonunun EOF'si ile karşılaşırsa, satır sonları da dahil olmak üzere yalnızca okunan karakterlere geri döner. Dosyadan dize okumak için int fscanf (FILE * fp, const char * format,...) işlevini de kullanabilirsiniz, ancak ilk boşluk ve satır sonuyla karşılaşıldığında okumayı durdurur.
canlı örnek
#katmak
Yukarıdaki kod derlenip yürütüldüğünde, önceki bölümde oluşturulan dosyaları okur ve aşağıdaki sonuçları üretir:
1: Bu 2: fprintf'i test ediyor...
3: Bu fput'ları test ediyor ...
İlk olarak, fscanf() yöntemi yalnızca This okur çünkü arkada bir boşlukla karşılaşır. İkinci olarak, kalan kısmı satırın sonuna kadar okumak için fgets () işlevini çağırın. Son olarak ikinci satırı tamamen okumak için fgets () öğesini çağırın.
İkili G/Ç işlevi
İkili giriş ve çıkış için aşağıdaki iki fonksiyon kullanılır:
size_t fread (void *ptr, size_t size_of_elements, size_t_of_elements sayısı, FILE *a_file); size_t fwrite (const void *ptr, size_t size_of_elements, size_t_of_elements sayısı, FILE *a_file);
Her iki işlev de depolama blokları (genellikle diziler veya yapılar) için okunur ve yazılır.
Yukarıdaki C dosyasının okunması ve yazılması, bir yazılım teknik operasyonu olan HDV Phoelectron Technology Ltd.'ye aittir. Ve ağla ilgili ekipman şirketi (örneğin: ACONU/ iletişimONU/ zekiONU/ lifONUvb.) güçlü bir yazılım ekibini bir araya getirerek her müşterinin ihtiyaç duyduğu özel talepleri özelleştirmesini ve ürünlerimizin daha akıllı ve gelişmiş olmasını sağladı.