در توسینسو تدریس کنید

و

با دانش خود درآمد کسب کنید

آموزش برنامه نویسی C قسمت 12 : فایل های متنی و باینری

سلام و وقت بخیر. در این جلسه درمورد فایل ها صحبت میکنیم. تا اینجای کار دیدید که هر بار یک برنامه را اجرا میکنیم، اطلاعاتی که وارد میکنیم یا اطلاعات خروجی، همگی با اتمام برنامه از بین میروند. اما واضح است که ما به این اطلاعات نیاز داریم و باید ذخیره شوند. روش های متفاوتی برای ذخیره سازی اطلاعات در برنامه ها وجود دارد که یکی از آنها ذخیره در فایل است. بطور کلی توابعی که مربوط به ورود و خروج اطلاعات از فایل ها در C وجود دارند، به 2 دسته تقسیم میشوند.

  1. توابع فایل های متنی text
  2. توابع فایل های باینری Binary

عملیات روی فایل ها را به 4 دسته کلی میتوان تقسیم کرد.

  1. ایجاد فایل
  2. باز کردن فایل
  3. خواندن و نوشتن در فایل
  4. بستن یک فایل
  • کار کردن با فایل : برای کار با فایل نیاز داریم که یک "اشاره گر" از جنس "فایل" داشته باشیم. این شاره گر وظیفه ایجاد ارتباط بین برنامه و فایل را دارد.
  • FILE *ptr ;
    

باز کردن فایل : برای باز کردن فایل از تابع fopen استفاده میکنیم.

ptr = fopen( "C:\\my_text_file.txt" , "w" );

الگوی کد این تابع به این صورت است که آرگومان اول تابع آدرس فایل و آرگومان دوم حالت (mode) دسترسی به فایل است. انواع mode عبارتند از :

  1. r به معنی Open For Reading - اگر فایل وجود نداشته باشد Null برمیگرداند.
  2. w به معنی Open for writing - اگر فایل وجود داشته باشد در آن overwrite میکند و اگر وجود نداشته باشد فایل را میسازد.
  3. a به معنی Open for append - اگر فایل وجود نداشته باشد آن را میسازد.
  4. +r به معنی Open for both reading and writing - اگر فایل وجود نداشته باشد Null برمیگرداند.
  5. +w به معنی Open for both reading and writing - اگر فایل وجود داشته باشد در آن overwrite میکند و اگر وجود نداشته باشد فایل را میسازد.
  6. +a به معنی Open for both reading and appending - اگر فایل وجود نداشته باشد آن را میسازد.

بستن فایل : بعد از اینکه کارمان با فایل تمام شد، مثلا در آن نوشتیم و از آن خواندیم، باید آن را ببندیم. این کار را با استفاده از تابع fclose انجام میدهیم.

fclose( ptr );

بسیار خوب. حالا بیایید چیز هایی را که یاد گرفتیم را پیاده سازی کنیم. طبق روال همیشه یک سند خالی با vim یا gedit باز کنید. به مثال ساده زیر توجه کنید.

#include <stdio.h>
#include <stdlib.h>
int main()
{
   int n;
   FILE *fptr;
   fptr=fopen("/root/Desktop/c/my_text_file" , "w");
   if ( fptr == NULL )
   {
      printf("Error");   
      exit(1);             
   }
   printf("Enter n: ");
   scanf( "%d",&n );
   fprintf(fptr,"%d \n",n);   
   fclose(fptr);
   return 0;
}

آموزش برنامه نویسی C  قسمت 12 : فایل های متنی و باینری

تنها نکته جدیدی که در کد وجود دارد، تابع fprintf است. این تابع همانند printf است با این تفاوت که نتیجه را درون فایل ذخیره میکند. همانطور که واضح است این تابع 3 آرگومان دارد. اولی همان اشاره گرمان به فایل است. دومی فرمت دخیره داده و سومی متغیری که میخواهیم محتویاتش در فایل ذخیره شود. حال به یک مثال ساده دیگر توجه کنید.

#include <stdio.h>
#include <stdlib.h>
int main()
{
   int n;
   FILE *fptr;
   if (( fptr=fopen("/root/Desktop/c/my_text_file" , "r" )) == NULL)
   {
       printf("Error");
       exit(1);
   }
   fscanf( fptr,"%d",&n );
   printf( "The Value of n is %d \n",n ); 
   fclose(fptr);   
   return 0;
}

آموزش برنامه نویسی C  قسمت 12 : فایل های متنی و باینری

در این کد هم مطلب جدیدی وجود ندارد جز تابع fscanf . این تابع همانند scanf است با این تفاوت که ورودی را از فایل میخواند. این تابع 3 آرگومان دارد. اولی اشاره گر به فایل. دومی فرمت داده و سومی هم آدرس متغیری که میخواهیم ورودی در آن دخیره شود.

2 تابع fgetchar و fputchar هم همانند getchar و putchar هستند.بهتر است یک مثال دیگر هم حل کنیم.

مثال: برنامه ای بنویسید که نام و نمرات دانشجویان را بگیرد و آنها را مرتب در یک فایل ذخیره کند.

#include <stdio.h>
#imclude <stdlib.h>
int main(){
   char name[50];
   int marks,i,n;
   FILE *fptr;
   printf( "Enter the number of Students: " );
   scanf( "%d",&n );
   FILE *fptr;
   fptr = ( fopen( "C:\\student.txt" , "a" ) );
   if( fptr == NULL)
   {
       printf( "Error" );
       exit(1);
   }
   for( i=0 ; i<n ; i++ )
   {
      printf( "For student %d Enter Name: " ,i+1 );
      scanf( "%s",name );
      printf( "Enter mark: " );
      scanf( "%d" , &mark);
      fprintf( fptr, "Name: %s\t Mark: %d \n" ,name,mark);
   }
   fclose(fptr);
   return 0;
}

آموزش برنامه نویسی C  قسمت 12 : فایل های متنی و باینری

فایل های باینری

بر اساس اینکه فایل به چه روشی برای پردازش باز میشود میتواند به دو دسته "باینری" و "متنی" تقسیم شود. در حجم زیاد داده، فایل های متنی مناسب نیستند و معمولا از فایل باینری استفاده میشود. کار کردن با فایل باینری بسیار شبیه به فایل متنی است. فقط کمی تفاوت در کد دارند.

باز کردن فایل باینری

حالت های باز کردن فایل های باینری را با rb+ ، rb+ ، wb ، wb+، ab ، ab نشان میدهند. فقط یک b نسبت به حالت فایل متنی اضافه شده.

خواندن و نوشتن در فایل باینری

از دو تابع fread و fwrite برای خواندن و نوشتن در فایل های باینری استفاده میشود. تابع fwrite چهار آرگومان دارد. آدرس فایل، اندازه داده روی فایل، تعداد داده و اشاره گر. تابع fread هم همینطور.

fwrite ( address_data , size_data , numbers_data to write , pointer_to_file );

به مثال ها توجه کنید.

فایل file4.c

#include <stdio.h>
#include <stdlib.h>
	struct rec
	{
		int x, y, z;
	};
	int main()
	{
		int counter;
		FILE *ptr;
		struct rec myrecord;
		ptr = fopen( "/root/Desktop/c/file.bin" , "wb" );
		if ( !ptr )
		{
			printf( "Unable to open file" );
			return 1;
		}
		for ( counter=1 ; counter <= 10 ; counter++ )
		{
			myrecord.x = counter;
                        myrecord.y = counter;  
                        myrecord.z = counter;
			fwrite( &myrecord , sizeof(struct rec) , 1 , ptr);
		}
		fclose( ptr );
		return 0;
	}

حال برای خواندن اطلاعات از کد زیر استفاده میکنیم.

فایل file5.c

#include <stdio.h>
#include <stdlib.h>
	struct rec
	{
		int x ,y ,z ;
	};

	int main()
	{
		int counter;
		FILE *ptr;
		struct rec myrecord;
		ptr = fopen( "/root/Desktop/c/file.bin" , "rb" );
		if ( !ptr )
		{
			printf( "Unable to open file!" );
			return 1;
		}
		for ( counter=1 ;  counter <= 10 ; counter++ )
		{
			fread( &myrecord , sizeof(struct rec) , 1 , ptr );
			printf( "%d \t " , myrecord.x);
                        printf( "%d \t " , myrecord.y);
                        printf( "%d \n " , myrecord.z);
		}
		fclose( ptr );
		return 0;
	}

آموزش برنامه نویسی C  قسمت 12 : فایل های متنی و باینری

کد ها ساده است و فک نمیکنم احتیاج به توضیح خاصی باشد. اگر فایل file.bin را باز کنیم قابل خواندن توسط انسان نیست. باید با کد مخصوص فایل باینری باز شود.

آموزش برنامه نویسی C  قسمت 12 : فایل های متنی و باینری

پایان قسمت دوازدهم

نویسنده : سید محمد باقر موسوی

منبع : جزیره برنامه نویسی وب سایت توسینسو

هرگونه نشر و کپی برداری بدون ذکر منبع و نام نویسنده دارای اشکال اخلاقی است

#برنامه_نویسی_به_زبان_c #نوشتن_shell_script_در_لینوکس #زبان_برنامه_نویسی_c_در_لینوکس #برنامه_نویسی_به_زبان_c_در_لینوکس #آموزش_گام_به_گام_برنامه_نویسی_c #برنامه_نویسی_c_در_linux #آموزش_برنامه_نویسی_c_در_لینوکس
عنوان
1 آموزش برنامه نویسی C قسمت 1 : نصب محیط برنامه نویسی رایگان
2 آموزش برنامه نویسی C قسمت 2 : Hello World رایگان
3 آموزش برنامه نویسی C قسمت 3 : Data Types رایگان
4 آموزش برنامه نویسی C قسمت 4 : Data Types رایگان
5 آموزش برنامه نویسی C قسمت 5 : اشاره گر ها رایگان
6 آموزش برنامه نویسی C قسمت 6 : آرایه ها رایگان
7 آموزش برنامه نویسی C قسمت 7 : ساختار شرط IF رایگان
8 آموزش برنامه نویسی C قسمت 8 : حلقه for رایگان
9 آموزش برنامه نویسی C قسمت 9 : حلقه While رایگان
10 آموزش برنامه نویسی C قسمت 10 : Struct رایگان
11 آموزش برنامه نویسی C قسمت 11 : تابع دریافت ورودی scanf رایگان
12 آموزش برنامه نویسی C قسمت 12 : فایل های متنی و باینری رایگان
13 آموزش برنامه نویسی C قسمت 13 : توابع رایگان
14 آموزش برنامه نویسی C قسمت 14 : توابع اشاره گر رایگان
15 آموزش برنامه نویسی C قسمت 15 : argc argv رایگان
16 آموزش برنامه نویسی C قسمت 16 : Multiple Source Files رایگان
17 آموزش برنامه نویسی C قسمت 17 : String Functions & Operations رایگان
18 آموزش برنامه نویسی C قسمت 18 : Char Pointers VS Array Char رایگان
19 آموزش برنامه نویسی C قسمت 19 : Binary & Unary Operations رایگان
20 آموزش برنامه نویسی C قسمت 20 : Type Casting رایگان
21 آموزش برنامه نویسی C قسمت 21 : readdir & opendir functions رایگان
22 آموزش برنامه نویسی C قسمت 22 : Fork Function رایگان
23 آموزش برنامه نویسی C قسمت 23 : Thread رایگان
24 آموزش برنامه نویسی C قسمت 24 : Switch Case Statement رایگان
25 آموزش برنامه نویسی C قسمت 25 : qsort رایگان
26 آموزش برنامه نویسی C قسمت 26 : Socket Programming رایگان
27 آموزش برنامه نویسی C قسمت 27 : لیست پیوندی (Linked List) رایگان
زمان و قیمت کل 0″ 0
0 نظر

هیچ نظری ارسال نشده است! اولین نظر برای این مطلب را شما ارسال کنید...

نظر شما
برای ارسال نظر باید وارد شوید.
از سرتاسر توسینسو
تنظیمات حریم خصوصی
تائید صرفنظر
×

تو می تونی بهترین نتیجه رو تضمینی با بهترین های ایران بدست بیاری ، پس مقایسه کن و بعد خرید کن : فقط توی جشنواره تابستانه می تونی امروز ارزونتر از فردا خرید کنی ....