C Dosya yönetimi
Dosya, büyük hacimli kalıcı verileri depolamak için kullanılabilir. Diğer birçok dil gibi, 'C' aşağıdaki dosya yönetimi işlevlerini sağlar,
- Bir dosyanın oluşturulması
- Bir dosyayı açmak
- Bir dosyayı okumak
- Bir dosyaya yazmak
- Bir dosyayı kapatmak
Aşağıdakiler, 'C'de bulunan en önemli dosya yönetimi işlevleridir.
işlevi | amaç |
fopen () | Bir dosya oluşturmak veya mevcut bir dosyayı açmak |
fclose () | Bir dosyayı kapatmak |
fprintf () | Bir dosyaya bir veri bloğu yazma |
fscanf () | Bir dosyadan bir blok verisinin okunması |
getc () | Bir dosyadan tek bir karakter okur |
putc () | Bir dosyaya tek bir karakter yazar |
getw () | Bir dosyadan bir tamsayı okur |
putw () | Bir dosyaya bir tamsayı yazma |
fseek () | Bir dosya işaretçisinin konumunu belirli bir konuma ayarlar |
ftell () | Bir dosya işaretçisinin geçerli konumunu verir |
geri sar () | Dosya işaretçisini dosyanın başlangıcına ayarlar |
Bu eğitimde öğreneceksiniz-
- Dosya Nasıl Oluşturulur
- Dosya Nasıl Kapatılır:
- Dosyaya Yazmak
- fputc () Fonksiyonu:
- fputs () İşlevi:
- fprintf () Fonksiyonu:
- Bir Dosyadan Veri Okuma
- Getc and putc ile Etkileşimli Dosya Okuma ve Yazma
Dosya Nasıl Oluşturulur
Bir dosya ile çalışmak istediğinizde, ilk adım bir dosya oluşturmaktır. Dosya, verilerin depolandığı bir bellekteki boşluktan başka bir şey değildir.
Bir 'C' programında bir 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 kitaplıkta tanımlanan bir veri yapısıdır.
fopen, bir dosyayı açmak için kullanılan standart bir işlevdir.
- Dosya sistemde mevcut değilse oluşturulur ve açılır.
- Sistemde zaten bir dosya varsa, bu işlev kullanılarak doğrudan açılır.
fp, tür dosyasına işaret eden bir dosya tanıtıcısıdır.
Bir dosya açtığınızda veya oluşturduğunuzda, dosyayla ne yapacağınızı belirtmeniz gerekir. Okuma / yazma amacıyla 'C' programlamada bir dosya oluşturulabilir veya açılabilir. Mod, aşağıda verilen amaçlardan herhangi biri için bir dosyayı açmak isteyip istemediğinizi belirtmek için kullanılır. Aşağıda, bir dosya ile ç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 varsa hiçbir veri silinmez. |
w | Yazmak için bir dosya açın. Bir dosya yazma modundaysa, bir dosya hiç yoksa yeni bir dosya oluşturulur. Bir sistemde bir dosya zaten mevcutsa, dosyanın içindeki tüm veriler kesilir ve yazma amacıyla açılır. |
a | Ekleme modunda bir dosya açın. Bir dosya ekleme modundaysa, dosya açılır. Dosyanın içeriği değişmez. |
r + | baştan okumak ve yazmak için açık |
w + | bir dosyanın üzerine yazmak, okumak ve yazmak için aç |
a + | okumak ve yazmak için aç, dosyaya ekleme |
Verilen sözdiziminde, dosya adı ve mod dizeler olarak belirtilir, bu nedenle her zaman çift tırnak içine alınmaları gerekir.
Misal:
#includeint 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
#includeint main() {FILE *fp;fp = fopen ("D://data.txt", "w");}
Dosya nasıl kapatılır
Dosyadaki işlemler bittiğinde her zaman bir dosya kapatılmalıdır. 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 sözdizimi aşağıdaki gibidir,
fclose (file_pointer);
Misal:
FILE *fp;fp = fopen ("data.txt", "r");fclose (fp);
Fclose işlevi, bağımsız değişken olarak bir dosya tanıtıcısı alır. Dosya tanıtıcısı ile ilişkili dosya daha sonra fclose işlevi yardımıyla kapatılır. Kapatma başarılı olursa 0 döndürür ve dosya kapatılırken bir hata oluşursa EOF (dosya sonu) döndürür.
Dosyayı kapattıktan sonra, aynı dosya tanıtıcısı 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, yeni satır karakterleri '\ n' açıkça eklenmelidir.
Stdio kitaplığı, bir dosyaya yazmak için gerekli işlevleri sunar:
- fputc (char, file_pointer) : file_pointer ile gösterilen dosyaya bir karakter yazar.
- fputs (str, file_pointer) : file_pointer ile gösterilen dosyaya bir dize yazar.
- fprintf (file_pointer, str, variable_lists) : file_pointer ile gösterilen dosyaya bir dize yazdırır. Dize isteğe bağlı olarak biçim belirteçlerini ve değişken_listeleri değişkenlerinin bir listesini içerebilir.
Aşağıdaki program bir dosyaya nasıl yazılacağını göstermektedir:
fputc () Fonksiyonu:
#includeint 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 fputc_test.txt dosyasına cümlenin başarıyla yazıldığını gösteren bir sonraki satır simgesi "\ n" gelene kadar tek bir karakter yazar . İşlem, dizinin her karakterini alıp dosyaya yazmaktır.
- Yukarıdaki programda fputc_test.txt adlı bir dosyayı bir yazma modunda oluşturup açtık ve dosyaya yazılacak dizgimizi bildirdik.
- For döngüsünü kullanarak karakter karakter yazma işlemi yaparız ve her karakteri dosyamıza "\ n" karakteriyle karşılaşıncaya kadar koyarız ve ardından dosya fclose işlevi kullanılarak kapatılır.
fputs () İşlevi:
#includeint 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);}
ÇIKTI:
- Yukarıdaki programda, yazma modunda fputs_test.txt adlı bir dosya oluşturduk ve açtık.
- Üç farklı dizge yazarak fputs () işlevini kullanarak bir yazma işlemi yaptıktan sonra
- Daha sonra dosya fclose işlevi kullanılarak kapatılır.
fprintf () Fonksiyonu:
#includeint 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;}
ÇIKTI:
- Yukarıdaki programda, yazma modunda fprintf_test.txt adlı bir dosya oluşturduk ve açtık.
- Fprintf () işlevi kullanılarak bir dizge yazılarak bir yazma işlemi gerçekleştirildikten sonra, dosya fclose işlevi kullanılarak kapatılır.
Bir Dosyadan Veri Okuma
Bir dosyadan veri okumaya adanmış üç farklı işlev vardır
- fgetc (file_pointer): Dosya tanıtıcısı tarafından gösterilen dosyadan sonraki karakteri döndürür. Dosyanın sonuna ulaşıldığında, EOF geri gönderilir.
- fgets (buffer, n, file_pointer): Dosyadan n-1 karakter okur ve dizeyi son karakter olarak NULL karakteri '\ 0' eklenen bir tamponda saklar.
- fscanf (file_pointer, conversion_specifiers, variable_adresses) : Verileri ayrıştırmak ve analiz etmek için kullanılır. Dosyadaki karakterleri okur ve girişi, dönüşüm belirticilerini kullanarak değişken_adresleri değişken işaretçilerinin listesine atar. Scanf'de olduğu gibi, boşluk veya satırsonu ile karşılaşıldığında fscanf'ın bir dizeyi okumayı durduracağını unutmayın.
Aşağıdaki program, sırasıyla fgets (), fscanf () ve fgetc () işlevlerini kullanarak fputs_test.txt dosyasından okumayı gösterir:
#includeint 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 pointerchar 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 pointerwhile ((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ış ve içinde "Guru99 ile C Öğrenme" dizesini içeren "fprintf_test.txt" adlı dosyayı açtık. Arabellek boyutunun tüm satırı işlemek için yeterli olması gereken yerde satır satır okuyan fgets () işlevini kullanarak okuruz.
- İşaretçi dosyasını dosyanın başlangıcına sıfırlamak için dosyayı yeniden açıyoruz. Her kelimeyi ayrı ayrı işlemek için çeşitli dize değişkenleri oluşturun. İçeriklerini görmek için değişkenleri yazdırın. Fscanf () esas olarak bir dosyadan veri ayıklamak ve ayrıştırmak için kullanılır.
- İş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 dosya karakterinden karakter karakter yazdırın
- Farklı varyantlar kullanarak bir okuma işlemi dosyası yaptıktan sonra, dosyayı fclose fonksiyonunu kullanarak tekrar kapattık.
Getc and putc ile Etkileşimli Dosya Okuma ve Yazma
Bunlar en basit dosya işlemleridir. Getc karakter almak anlamına gelir ve putc koyma karakteri anlamına gelir. Bu iki işlev, bir seferde yalnızca tek bir karakteri işlemek için kullanılır.
Aşağıdaki program, 'C' programlamadaki dosya işleme fonksiyonlarını göstermektedir:
#includeint main() {FILE * fp;char c;printf("File Handling\n");//open a filefp = fopen("demo.txt", "w");//writing operationwhile ((c = getchar()) != EOF) {putc(c, fp);}//close filefclose(fp);printf("Data Entered:\n");//readingfp = fopen("demo.txt", "r");while ((c = getc(fp)) != EOF) {printf("%c", c);}fclose(fp);return 0;}
Çıktı:
- Yukarıdaki programda, yazma modunda demo adlı bir dosya oluşturduk ve açtık.
- Bir yazma işlemi gerçekleştirildikten sonra, dosya fclose işlevi kullanılarak kapatılır.
- Şimdi okuma modunda veri içeren bir dosyayı tekrar açtık. Eof bulunana kadar 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.
- Bir okuma işlemi gerçekleştirdikten sonra dosya fclose işlevi kullanılarak tekrar kapatılır.
Özet
- Dosya, hafızada verilerin depolandığı alandır.
- 'C' programlama, bir dosya ile ilgilenmek için çeşitli işlevler sağlar.
- Dosyaları değiştirme mekanizmasına dosya yönetimi adı verilir.
- Üzerinde işlem yapmadan önce dosya açılmalıdır.
- Bir dosya okuma, yazma veya ekleme modunda açılabilir.
- Getc ve putc işlevleri tek bir karakteri okumak ve yazmak için kullanılır.
- Fscanf () işlevi, bir dosyadaki verileri okumaya ve ayrıştırmaya izin verir
- EOF ile karşılaşılana kadar tüm dosyayı kapsayacak şekilde döngü yaparak ( getc işlevini kullanarak ) tüm dosyayı okuyabiliriz.
- Adını oluşturduktan sonra fprintf () işlevini kullanarak bir dosyaya yazabiliriz ve dizge metninin sonunda yeni satır karakteri olmalıdır.