C Dosyaları G/Ç: Dosya Oluşturma, Açma, Okuma, Yazma ve Kapatma
⚡ Akıllı Özet
C dilinde dosya işleme, stdio kütüphanesi aracılığıyla kalıcı verileri diske kaydeder; bu kütüphane fopen ile dosya açar, fputc, fputs veya fprintf ile yazma, fgetc, fgets veya fscanf ile okuma ve fclose ile kapatma işlemlerini gerçekleştirir.

C Dosya yönetimi
Dosyalar, büyük miktarda kalıcı veriyi depolamak için kullanılabilir. Birçok diğer dil gibi 'C' de aşağıdaki dosya yönetimi özelliklerini sunar. fonksiyonlar,
- Bir dosyanın oluşturulması
- Dosya açma
- Bir dosyayı okuma
- Bir dosyaya yazma
- Bir dosyayı kapatma
Aşağıda 'C'de mevcut en önemli dosya yönetim işlevleri listelenmiştir:
| işlev | amaç |
|---|---|
| fopen() | Dosya oluşturma veya mevcut bir dosyayı açma |
| fclose() | Bir dosyayı kapatma |
| fprintf() | Bir dosyaya veri bloğu yazma |
| fscanf () | Bir dosyadan blok verisinin okunması |
| getc () | Bir dosyadan tek bir karakter okur |
| putc () | Bir dosyaya tek bir karakter yazar |
| getw () | Bir dosyadan bir tam sayı okur |
| putw () | Bir dosyaya tamsayı yazma |
| fara () | Bir dosya işaretçisinin konumunu belirtilen konuma ayarlar |
| söyle () | Bir dosya işaretçisinin geçerli konumunu döndürür |
| geri sarma () | Dosya işaretçisini bir dosyanın başlangıcına ayarlar |
Dosya Nasıl Oluşturulur
Bir dosyayla çalışmak istediğinizde ilk adım bir dosya oluşturmaktır. Dosya, verilerin depolandığı bellekteki alandan başka bir şey değildir.
Bir 'C' programında dosya oluşturmak için aşağıdaki sözdizimi kullanılır:
FILE *fp; fp = fopen ("file_name", "mode");
Yukarıdaki sözdiziminde dosya, standart kütüphanede tanımlanan bir veri yapısıdır.
fopen, bir dosyayı açmak için kullanılan standart bir işlevdir.
- Eğer dosya sistemde yoksa oluşturulup açılır.
- Dosya sistemde zaten mevcutsa, bu fonksiyon kullanılarak doğrudan açılır.
fp bir dosyadır. işaretçi Bu da tür dosyasını işaret eder.
Bir dosyayı her açtığınızda veya oluşturduğunuzda, dosyayla ne yapacağınızı belirtmeniz gerekir. 'C' programlamada bir dosya okuma/yazma amaçları için oluşturulabilir veya açılabilir. Bir mod, bir dosyayı aşağıda verilen amaçlardan herhangi biri için açmak isteyip istemediğinizi belirtmek için kullanılır. Aşağıda, bir dosyayla çalışırken kullanılabilecek 'C' programlamadaki farklı mod türleri verilmiştir.
| Dosya Modu | Açıklama |
|---|---|
| r | Okumak için bir dosya açın. Bir dosya okuma modundaysa, sistemde zaten bir dosya mevcutsa hiçbir veri silinmez. |
| w | Yazmak için bir dosya açın. Bir dosya yazma modundaysa, dosya hiç mevcut değilse yeni bir dosya oluşturulur. Bir dosya sistemde zaten mevcutsa, dosyanın içindeki tüm veriler kesilir ve yazma amacıyla açılır. |
| a | Dosyayı ekleme modunda açın. Bir dosya ekleme modundaysa, dosya açılır. Dosyanın içeriği değişmez. |
| r+ | baştan itibaren okumaya ve yazmaya açık |
| w+ | okuma ve yazmaya açık, bir dosyanın üzerine yazılıyor |
| a+ | Okumaya ve yazmaya açık, dosyaya ekleniyor |
Verilen sözdiziminde dosya adı ve mod şu şekilde belirtilir: dizeleri Bu nedenle her zaman çift tırnak içine alınmaları gerekir.
Örneğin:
#include <stdio.h> int main() { FILE *fp; fp = fopen ("data.txt", "w"); }
Çıktı:
Dosya, kodunuzu kaydettiğiniz klasörde oluşturulur.
Dosyanızı oluşturmak istediğiniz yolu belirtebilirsiniz
#include <stdio.h> int main() { FILE *fp; fp = fopen ("D://data.txt", "w"); }
Bir dosya nasıl kapatılır
Dosya üzerinde yapılan işlemler bittiğinde mutlaka dosya kapatılmalıdır. Bu, dosyanın içeriğinin ve bağlantılarının sonlandırıldığı anlamına gelir. Bu, dosyanın kazara hasar görmesini önler.
'C', dosya kapatma işlemini gerçekleştirmek için fclose işlevini sağlar. Fclose'un sözdizimi aşağıdaki gibidir,
fclose (file_pointer);
Örneğin:
FILE *fp; fp = fopen ("data.txt", "r"); fclose (fp);
`fclose` fonksiyonu, argüman olarak bir dosya işaretçisi alır. Dosya işaretçisiyle ilişkili dosya, `fclose` fonksiyonu yardımıyla kapatılır. Kapatma işlemi başarılı olursa 0, dosya kapatma sırasında bir hata oluşursa EOF (dosya sonu) döndürür.
Dosyayı kapattıktan sonra aynı dosya işaretçisi diğer dosyalarla da kullanılabilir.
'C' programlamada program sonlandırıldığında dosyalar otomatik olarak kapanır. Bir dosyayı fclose işlevi yazarak manuel olarak kapatmak iyi bir programlama uygulamasıdır.
Dosyaya Yazmak
C'de, bir dosyaya yazarken '\n' yeni satır karakterlerinin açıkça eklenmesi gerekir.
Stdio kütüphanesi bir dosyaya yazmak için gerekli fonksiyonları sunar:
- fputc(char, file_pointer): Bu fonksiyon, file_pointer tarafından işaret edilen dosyaya bir karakter yazar.
- fputs(str, file_pointer): Belirtilen dosyaya bir dize yazar.
- fprintf(file_pointer, str, variable_lists): Bu fonksiyon, file_pointer tarafından işaret edilen dosyaya bir dize yazdırır. Dize isteğe bağlı olarak biçim belirleyicileri ve variable_lists değişken listesini içerebilir.
Aşağıdaki program bir dosyaya yazmanın nasıl gerçekleştirileceğini gösterir:
fputc() İşlev:
#include <stdio.h> int main() { int i; FILE * fptr; char fn[50]; char str[] = "Guru99 Rocks\n"; fptr = fopen("fputc_test.txt", "w"); // "w" defines "writing mode" for (i = 0; str[i] != '\n'; i++) { /* write to file using fputc() function */ fputc(str[i], fptr); } fclose(fptr); return 0; }
Çıktı:
Yukarıdaki program, bir sonraki satır sembolü olan "\n" karakterine ulaşana kadar fputc_test.txt dosyasına tek bir karakter yazar; bu karakter, cümlenin başarıyla yazıldığını gösterir. İşlem, dizideki her karakteri alıp dosyaya yazmaktan ibarettir.
- Yukarıdaki programda fputc_test.txt isimli dosyayı yazma modunda oluşturup açtık ve dosyaya yazılacak stringimizi deklare ettik.
- For döngüsünü kullanarak karakter karakter yazma işlemi yapıyoruz ve her karakteri “\n” karakteriyle karşılaşıncaya kadar dosyamıza koyuyoruz, ardından fclose fonksiyonu kullanılarak dosya kapatılıyor.
fputs () İşlev:
#include <stdio.h> int main() { FILE * fp; fp = fopen("fputs_test.txt", "w+"); fputs("This is Guru99 Tutorial on fputs,", fp); fputs("We don't need to use for loop\n", fp); fputs("Easier than fputc function\n", fp); fclose(fp); return (0); }
Çıktı:
- Yukarıdaki programda fputs_test.txt adlı bir dosyayı yazma modunda oluşturup açtık.
- fputs() fonksiyonunu kullanarak üç farklı dize yazarak bir yazma işlemi gerçekleştirdikten sonra
- Daha sonra fclose işlevi kullanılarak dosya kapatılır.
fprintf()İşlev:
#include <stdio.h> int main() { FILE *fptr; fptr = fopen("fprintf_test.txt", "w"); // "w" defines "writing mode" /* write to file */ fprintf(fptr, "Learning C with Guru99\n"); fclose(fptr); return 0; }
Çıktı:
- Yukarıdaki programda fprintf_test.txt adlı bir dosyayı yazma modunda oluşturduk ve açtık.
- fprintf() fonksiyonu kullanılarak bir string yazılarak yazma işlemi gerçekleştirildikten sonra fclose fonksiyonu kullanılarak dosya kapatılır.
Bir Dosyadan Veri Okumak
Bir dosyadan veri okumaya ayrılmış üç farklı işlev vardır
- fgetc(file_pointer): Dosya işaretçisi tarafından gösterilen dosyadan bir sonraki karakteri döndürür. Dosyanın sonuna ulaşıldığında, EOF (dosya sonu) sinyali gönderilir.
- fgets(buffer, n, file_pointer): Dosyadan n-1 karakter okur ve bu dizeyi, sonuna NULL karakteri '\0' eklenmiş bir arabelleğe kaydeder.
- fscanf(file_pointer, conversion_specifiers, variable_adresses): Verileri ayrıştırmak ve analiz etmek için kullanılır. Dosyadan karakterleri okur ve dönüştürme belirleyicilerini kullanarak girişi bir değişken işaretçileri listesi olan variable_adresses'e atar. Scanf'te olduğu gibi, fscanf'in de boşluk veya yeni satır karakteriyle karşılaşıldığında dize okumayı durdurduğunu unutmayın.
Aşağıdaki program, fgets(), fscanf() ve fgetc() fonksiyonlarını kullanarak fputs_test.txt dosyasından okuma işlemini göstermektedir:
#include <stdio.h> int main() { FILE * file_pointer; char buffer[30], c; file_pointer = fopen("fprintf_test.txt", "r"); printf("----read a line----\n"); fgets(buffer, 50, file_pointer); printf("%s\n", buffer); printf("----read and parse data----\n"); file_pointer = fopen("fprintf_test.txt", "r"); //reset the pointer char str1[10], str2[2], str3[20], str4[2]; fscanf(file_pointer, "%s %s %s %s", str1, str2, str3, str4); printf("Read String1 |%s|\n", str1); printf("Read String2 |%s|\n", str2); printf("Read String3 |%s|\n", str3); printf("Read String4 |%s|\n", str4); printf("----read the entire file----\n"); file_pointer = fopen("fprintf_test.txt", "r"); //reset the pointer while ((c = getc(file_pointer)) != EOF) printf("%c", c); fclose(file_pointer); return 0; }
Sonuç:
----read a line---- Learning C with Guru99 ----read and parse data---- Read String1 |Learning| Read String2 |C| Read String3 |with| Read String4 |Guru99| ----read the entire file---- Learning C with Guru99
- Yukarıdaki programda, daha önce fprintf() fonksiyonu kullanılarak yazılmış olan "fprintf_test.txt" adlı dosyayı açtık ve bu dosya "Learning C with" başlığını içermektedir. Guru99” dizesi. Bunu, satır satır okuyan ve arabellek boyutunun tüm satırı işleyebilecek kadar büyük olması gereken fgets() fonksiyonunu kullanarak okuyoruz.
- Dosya işaretçisini dosyanın başına geri döndürmek için dosyayı yeniden açıyoruz. Her kelimeyi ayrı ayrı işlemek için çeşitli dize değişkenleri oluşturuyoruz. Değişkenlerin içeriklerini görmek için yazdırıyoruz. fscanf() fonksiyonu esas olarak şu amaçla kullanılır:tracve bir dosyadan veri ayrıştırma.
- İşaretçi dosyasını dosyanın başlangıcını gösterecek şekilde sıfırlamak için dosyayı yeniden açın. Verileri okuyun ve EOF ifadesiyle karşılaşılıncaya kadar getc() işlevini kullanarak dosyadan karakter karakter yazdırın
- Farklı varyantlar kullanarak dosya okuma işlemi gerçekleştirdikten sonra dosyayı yine fclose fonksiyonunu kullanarak kapattık.
Getc ve putc ile Etkileşimli Dosya Okuma ve Yazma
Bunlar en basit dosya işlemleridir. Getc, get karakterini, putc ise put karakterini temsil eder. Bu iki işlev aynı anda yalnızca tek bir karakteri işlemek için kullanılır.
Aşağıdaki program 'C' programlamada dosya işleme fonksiyonlarını göstermektedir:
#include <stdio.h> int main() { FILE * fp; char c; printf("File Handling\n"); //open a file fp = fopen("demo.txt", "w"); //writing operation while ((c = getchar()) != EOF) { putc(c, fp); } //close file fclose(fp); printf("Data Entered:\n"); //reading fp = fopen("demo.txt", "r"); while ((c = getc(fp)) != EOF) { printf("%c", c); } fclose(fp); return 0; }
Çıktı:
- Yukarıdaki programda demo adlı bir dosyayı yazma modunda oluşturduk ve açtık.
- Yazma işlemi gerçekleştirildikten sonra fclose işlevi kullanılarak dosya kapatılır.
- Şimdi okuma modunda veri içeren bir dosyayı tekrar açtık. Eof bulunana kadar bir while döngüsü yürütülür. Dosyanın sonu bulunduğunda işlem sonlandırılacak ve veriler printf işlevi kullanılarak görüntülenecektir.
- Okuma işlemi gerçekleştirildikten sonra dosya fclose işlevi kullanılarak tekrar kapatılır.











