Bilgisayar Programlama - Dosya G / Ç

Bilgisayar Dosyaları

Bir bilgisayar dosyası, verileri düz metin, görüntü verileri veya diğer içerikler gibi dijital formatta depolamak için kullanılır. Bilgisayar dosyaları farklı dizinler içinde düzenlenebilir. Dosyalar dijital verileri tutmak için kullanılırken, dizinler dosyaları tutmak için kullanılır.

Bilgisayar dosyaları, kağıt belgelerin dijital karşılığı olarak düşünülebilir. Programlama sırasında, kaynak kodunuzu farklı uzantılara sahip metin dosyalarında tutarsınız, örneğin, C programlama dosyaları uzantı ile biter.c, Java programlama dosyaları .javave Python dosyaları .py.

Dosya Girişi / Çıkışı

Genellikle not defteri, MS Word, MS Excel veya MS Powerpoint gibi metin düzenleyicileri kullanarak dosyalar oluşturursunuz. Ancak çoğu zaman bilgisayar programlarını kullanarak da dosyalar oluşturmamız gerekir. Bir bilgisayar programı kullanarak mevcut bir dosyayı değiştirebiliriz.

Dosya girişi, bir dosyaya yazılan veriler anlamına gelir ve dosya çıkışı, bir dosyadan okunan veriler anlamına gelir. Aslında, girdi ve çıktı terimleri daha çok ekran girdisi ve çıktısı ile ilgilidir. Ekranda bir sonuç görüntülediğimizde buna çıktı denir. Benzer şekilde, programımıza komut isteminden bir girdi sağlarsak buna girdi denir.

Şimdilik, bir dosyaya yazmanın dosya girişi ve bir dosyadan bir şey okumanın dosya çıktısı olduğunu hatırlamak yeterlidir.

Dosya İşlem Modları

Bir bilgisayar programı kullanarak herhangi bir dosya ile çalışmaya başlamadan önce, ya mevcut değilse yeni bir dosya oluşturmamız ya da zaten var olan bir dosyayı açmamız gerekir. Her iki durumda da, aşağıdaki modlarda bir dosya açabiliriz -

  • Read-Only Mode- Sadece mevcut bir dosyayı okuyacaksanız ve dosyaya daha fazla içerik yazmak istemiyorsanız, dosyayı salt okunur modda açacaksınız. Hemen hemen tüm programlama dilleri, dosyaları salt okunur modda açmak için sözdizimi sağlar.

  • Write-Only Mode- Mevcut bir dosyaya veya yeni oluşturulmuş bir dosyaya yazacaksanız ancak o dosyadan herhangi bir yazılı içerik okumak istemiyorsanız, dosyayı salt yazılır modunda açacaksınız. Tüm programlama dilleri, dosyaları salt yazma modunda açmak için sözdizimi sağlar.

  • Read & Write Mode - Aynı dosyaya hem okuyacak hem de yazacaksanız, dosyayı okuma ve yazma modunda açacaksınız.

  • Append Mode- Bir dosyayı yazmak için açtığınızda, dosyanın başından yazmaya başlamanızı sağlar; ancak varsa mevcut içeriğin üzerine yazacaktır. Var olan herhangi bir içeriğin üzerine yazmak istemediğimizi varsayalım, ardından dosyayı ekleme modunda açıyoruz. Ekleme modu nihayetinde içeriğin dosyanın sonuna eklenmesine izin veren bir yazma modudur. Hemen hemen tüm programlama dilleri, dosyaları ekleme modunda açmak için sözdizimi sağlar.

İlerleyen bölümlerde, yeni bir dosyanın nasıl açılacağını, ona nasıl yazılacağını ve daha sonra aynı dosyaya nasıl daha fazla içerik ekleneceğini ve okunacağını öğreneceğiz.

Dosyaları Açma

Kullanabilirsiniz fopen()yeni bir dosya oluşturma veya mevcut bir dosyayı açma işlevi. Bu çağrı türünde bir nesneyi başlatacakFILE, akışı kontrol etmek için gerekli tüm bilgileri içeren. İşte prototip, yani bu işlev çağrısının imzası -

FILE *fopen( const char * filename, const char * mode );

Buraya, filename dize değişmezidir, dosyanızı adlandırmak ve erişmek için kullanacaksınız mode aşağıdaki değerlerden birine sahip olabilir -

Sr.No Mod ve Açıklama
1

r

Okuma amacıyla mevcut bir metin dosyasını açar.

2

w

Yazmak için bir metin dosyası açar. Mevcut değilse, yeni bir dosya oluşturulur. Burada programınız dosyanın başından itibaren içerik yazmaya başlayacaktır.

3

a

Ekleme modunda yazmak için bir metin dosyası açar. Mevcut değilse, yeni bir dosya oluşturulur. Burada, programınız mevcut dosya içeriğine içerik eklemeye başlayacaktır.

4

r+

Her ikisini de okumak ve yazmak için bir metin dosyası açar.

5

w+

Hem okumak hem de yazmak için bir metin dosyası açar. Varsa, önce dosyayı sıfır uzunlukta keser; aksi takdirde dosya yoksa oluşturur.

6

a+

Hem okumak hem de yazmak için bir metin dosyası açar. Mevcut değilse bir dosya oluşturur. Okuma baştan başlayacak, ancak yazı sadece eklenebilir.

Bir Dosyayı Kapatmak

Bir dosyayı kapatmak için fclose( )işlevi. Bu işlevin prototipi -

int fclose( FILE *fp );

fclose( ) başarı durumunda sıfır döndürür veya EOF, özel karakter, dosyayı kapatmada bir hata varsa. Bu işlev aslında arabellekte beklemede olan verileri dosyaya boşaltır, dosyayı kapatır ve dosya için kullanılan tüm belleği serbest bırakır. EOF, başlık dosyasında tanımlanan bir sabittirstdio.h.

Bir dosyayı karakter karakter veya sabit uzunlukta bir dizi biçiminde okumak ve yazmak için C standart kitaplığı tarafından sağlanan çeşitli işlevler vardır. Bir sonraki bölümde birkaçını görelim.

Dosya Yazma

Aşağıda verilen, bir akışa tek tek karakterleri yazmak için en basit işlevdir -

int fputc( int c, FILE *fp );

İşlev fputc() c bağımsız değişkeninin karakter değerini, tarafından başvurulan çıktı akışına yazar fp. Başarı üzerine yazılan karakteri döndürür, aksi takdirdeEOFbir hata varsa. Bir akışa boş sonlandırılmış bir dizge yazmak için aşağıdaki işlevleri kullanabilirsiniz -

int fputs( const char *s, FILE *fp );

İşlev fputs() dizeyi yazar sfp tarafından başvurulan dosyaya. Başarı durumunda negatif olmayan bir değer döndürür, aksi takdirdeEOFherhangi bir hata durumunda iade edilir. İşlevi de kullanabilirsinizint fprintf(FILE *fp,const char *format, ...)bir dosyaya bir dize yazmak için. Aşağıdaki örneği deneyin -

#include <stdio.h>

int main() {
   FILE *fp;

   fp = fopen("/tmp/test.txt", "w+");
   fprintf(fp, "This is testing for fprintf...\n");
   fputs("This is testing for fputs...\n", fp);
   fclose(fp);
}

Yukarıdaki kod derlendiğinde ve çalıştırıldığında, yeni bir dosya oluşturur test.txt içinde /tmpdizin ve iki farklı işlevi kullanarak iki satır yazar. Bu dosyayı bir sonraki bölümde okuyalım.

Bir Dosyayı Okumak

Aşağıda, bir metin dosyasını karakter karakter okumak için en basit işlev verilmiştir -

int fgetc( FILE * fp );

fgetc() işlev, tarafından başvurulan girdi dosyasından bir karakter okur fp. Dönüş değeri, okunan karakterdir; veya herhangi bir hata durumunda geri dönerEOF. Aşağıdaki işlev, bir akıştan bir dizeyi okumanızı sağlar -

char *fgets( char *buf, int n, FILE *fp );

İşlev fgets() tarafından referans verilen giriş akışından n - 1 karaktere kadar okur fp. Okuma dizesini arabelleğe kopyalarbuf, ekleniyor null dizeyi sonlandırmak için karakter.

Bu işlev, maksimum karakter sayısını okumadan önce bir satırsonu karakteri '\ n' veya EOF ile karşılaşırsa, yeni satır karakteri dahil olmak üzere yalnızca o noktaya kadar okunan karakterleri döndürür. Ayrıca kullanabilirsinint fscanf(FILE *fp, const char *format, ...) bir dosyadan dizeleri okumak için, ancak ilk boşluk karakteriyle karşılaştıktan sonra okumayı durdurur.

#include <stdio.h>

main() {

   FILE *fp;
   char buff[255];

   fp = fopen("/tmp/test.txt", "r");
   fscanf(fp, "%s", buff);
   printf("1 : %s\n", buff );

   fgets(buff, 255, (FILE*)fp);
   printf("2: %s\n", buff );
   
   fgets(buff, 255, (FILE*)fp);
   printf("3: %s\n", buff );
   fclose(fp);
}

Yukarıdaki kod derlenip çalıştırıldığında, önceki bölümde oluşturulan dosyayı okur ve aşağıdaki sonucu verir -

1 : This
2 : is testing for fprintf...

3 : This is testing for fputs...

Burada ne olduğunu analiz edelim. İlk öncefscanf() yöntem okur Thisçünkü ondan sonra bir boşlukla karşılaştı. İkinci çağrı içinfgets(), kalan satırı satırın sonuyla karşılaşana kadar okur. Son olarak, son çağrıfgets() ikinci satırı tamamen okur.

Java'da Dosya G / Ç

Java, Dosya G / Ç'yi işlemek için daha da zengin işlevler sağlar. Bu konu hakkında daha fazla bilgi için Java Öğreticilerimize göz atmanızı öneririz.

Burada, yukarıda açıklanan C programına eşdeğer basit bir Java programı göreceğiz. Bu program bir metin dosyası açacak, içine birkaç metin satırı yazacak ve dosyayı kapatacaktır. Son olarak, aynı dosya açılır ve daha sonra önceden oluşturulmuş bir dosyadan okunur. Çıktıyı görmek için aşağıdaki programı çalıştırmayı deneyebilirsiniz -

import java.io.*;

public class DemoJava {
   public static void main(String []args) throws IOException {
      File file = new File("/tmp/java.txt");
      
      // Create a File
      file.createNewFile();
      
      //  Creates a FileWriter Object using file object
      FileWriter writer = new FileWriter(file); 
      
      // Writes the content to the file
      writer.write("This is testing for Java write...\n");
      writer.write("This is second line...\n");
      
      // Flush the memory and close the file
      writer.flush();
      writer.close();
      
      // Creates a FileReader Object
      FileReader reader = new FileReader(file); 
      char [] a = new char[100];
      
      // Read file content in the array
      reader.read(a);
      System.out.println( a );
      
      // Close the file
      reader.close();
   }
}

Yukarıdaki program yürütüldüğünde, aşağıdaki sonucu verir -

This is testing for Java write...
This is second line...

Python'da Dosya G / Ç

Aşağıdaki program, yeni bir dosya açmak, içine biraz içerik yazmak ve son olarak aynı dosyayı okumak için aynı işlevselliği göstermektedir -

# Create a new file
fo = open("/tmp/python.txt", "w")

# Writes the content to the file
fo.write( "This is testing for Python write...\n");
fo.write( "This is second line...\n");

# Close the file
fo.close()

# Open existing file
fo = open("/tmp/python.txt", "r")

# Read file content in a variable
str = fo.read(100);
print str

# Close opened file
fo.close()

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

This is testing for Python write...
This is second line...