Read Write Record in File – The Binary Mode

Read Write Record in File: जब हमें किसी File में Records Store करके रखने होते है, जैसे कि किसी Company के Employees के Records या किसी School के Students के Records, तो हम इन Records को अच्छी तरह से Maintain करने के लिए Structure का प्रयोग कर सकते हैं। उदाहरण के लिए हम पिछले प्रोग्राम को ही Structure के प्रयोग से बना कर Data को File में Store कर रहे हैं:

// Program
#include<stdio.h>
main()
{
	FILE *fp;
	char again = 'y';
	struct emp 
	{
		char name[20];
		int age;
		float salary;
	};
	struct emp e;

	clrscr();

	fp = fopen("Emp.rec", "w");

	while( again =='y' || again == 'Y' )
	{
		printf("\n Enter Name  Age and Salary");
		scanf("%s %d %f", e.name, &e.age, &e.salary);

		fprintf(fp, "%s %d %f\n", e.name, e.age, e.salary);

		printf("\n Do You Want To Enter Another Record : Y/N ");
		fflush(stdin);
		again = getchar();
	}
	fclose(fp);
}

इस प्रोग्राम द्वारा भी हम Employees के Records को File मे Store कर सकते हैं। लेकिन इस प्रोग्राम की दो कमियां हैं:

  • इस Program में File को Text Mode में Open किया गया है, इसलिए इस File में fprintf() Function द्वारा salary को Store किया गया है। इस वजह से File में salary String के रूप में Store होती है, जिससे File में अधिक Bytes का उपयोग होता है।
  • दूसरी कमी ये है कि यदि Structure के Members बढा, जाएंगे, तो इस Structure को संचालित करना काफी मुश्किल हो जाएगा।

इन समस्याओं से बचने के लिए हम File को Binary Mode में Open करके fread() व fwrite() Functions का प्रयोग कर सकते हैं।

किसी भी File को Binary Mode में Open करने के लिए हमें Mode String के साथ “b” का प्रयोग करना पडता है। हमने इसी Program को थोडा Modify करके फिर से Develop किया है, जिसमें File को Binary Mode में Open किया है और fprintf() Function के स्थान पर fread() व fscanf() Function के स्थान पर fwrite() Function का प्रयोग करके प्रोग्राम से ऊपर बताई गई समस्याओं दूर किया गया है। ये Program निम्नानुसार है:

// Program
#include<stdio.h>

main()
{
	FILE *fp;
	char again = 'y';

	struct emp 
	{
		char name[20];
		int age;
		float salary;
	};
	struct emp e;
	clrscr();

	fp = fopen("Emp.rec", "wb");

	while( again =='y' || again == 'Y' )
	{
		printf("\n Enter Name  Age and Salary");
		scanf("%s %d %f", e.name, &e.age, &e.salary);
		fwrite (&e, sizeof(e), 1, fp);
		printf("\n Do You Want To Enter Another Record : Y/N ");
		fflush(stdin);
		again = getchar();
	}
	fclose(fp);
}

इस File को Binary Mode में Open करने के लिए निम्न Statement  में “wb” Mode String का प्रयोग किया गया है:

        fp = fopen(“Emp.rec”, “wb”);

wb” Mode String File को Writing Mode में Open करता है और इसमें Store होने वाले Data Binary रूप में File में Store होते हैं। Binary Mode का मतलब ये होता है, कि यदि हम इस File के Data को Read करना चाहते हैं, तो हम इसके Data को साधारण तरीके से Read नहीं कर सकते हैं। इसके Data को Read करने के लिए हमें वापस इसे Binary Mode में ही Open करना होगा। यदि हम इस Data File को साधारण Mode में Open करेंगे, तो हमें File में ना समझ में आने वाले अजीब से चिन्ह दिखाई देंगे ना कि वास्तविक Data जो कि उस File में Store किए गए हैं।

जब हम Keyboard से Data Input करते हैं, तो वह Data e नाम के Structure Variable में जा कर Store हो जाते हैं। इस Program में हमने File को Binary Mode में Open किया है, इसलिए Data को Binary रूप में File में Store करने के लिए fwrite() Function को Use किया है। इस Function में चार Arguments Pass किए जाते हैं:

  • इस Function में पहला Argument &e है, जो कि File में Write किये जाने वाले Structure का Address है। यह Argument “C” Compiler को बताता है कि जो Data File में Store होगा वह Data इस Structure से आएगा।
  • दूसरा Argument Program Control को ये बताता है, कि File में store होने वाले data जिस Variable से आ रहे हैं, उस Variable की Size क्या है ? यानी वह Variable memory में कितनी Byte Data के लिए Reserve करता है। जैसे यदि Data Int प्रकार का हो तो ये size 2 Byte होगी और यदि Data Float प्रकार का हो तो इसकी Size 4 byte की होगी। चूंकि हम यहां पर एक Structure प्रकार के Variable द्वारा Data को File में Store कर रहे हैं, इसलिए यहां sizeof() Operator के अंदर ही Structure Variable e को लिख दिया गया है, जिससे Program Control स्वयं ही ये पता लगा ले कि Structure की Size क्या है ? ये Argument हमें ये सुविधा देता है कि यदि Structure के Members बढा, या घटा, जाते हैं, तो इस Statement द्वारा “C” Compiler स्वयं ही बदली हुई Size को पहचान लेता है।
  • तीसरा Argument ये बताता है कि हमें एक बार में कितने Structures को File में Write करना है। यहां हम एक बार में केवल एक Structure को File में Write कर रहे हैं, इसलिए इसकी संख्‍या 1 रखी है। यदि हम चाहें तो एक Array का प्रयोग करके एक से अधिक Structures को एक समय में एक साथ File में लिख सकते हैं।
  • अन्तिम Argument उस File का File Pointer है, जिसमें हमें Data को Write करना है।

इस प्रकार से इस Program द्वारा हम किसी File में उतने ही Byte का उपयोग करके Data को लिख सकते हैं, जितने Byte का उपयोग वह Program Memory में करता है। अब हम इस Binary Mode File में लिखे गए Data को वापस प्राप्त करने के लिए एक Program लिख रहे हैं। इस Program में fread() Function का प्रयोग किया गया है।

// Program
#include<stdio.h>
main()
{
	FILE *fp;
	struct emp
	{
		char name[20];
		int age;
		float salary;
	};
	struct emp e;
	clrscr();
	fp = fopen ("emp.rec" , "rb");
	while(fread(&e, sizeof(e), 1, fp ) == 1 )
		printf("\n %s\t %d\t %f\t", e.name, e.age, e.salary);
	fclose(fp);
	getch();
}

यह Program emp.rec नाम की File में Store Data को Output में Screen पर दिखा देता है। इस Program में File से Data को Read करने के लिए fread() Function का प्रयोग किया है। इस Function में भी चार Arguments Pass किए जाते हैं:

  • पहला Argument &e Program Control को बताता है, कि जो Data File से Read किया जाना है, वह Data e नाम के एक Variable में है और ये Variable एक Structure प्रकार का Variable है।
  • दूसरा Argument Program Control को बताता है कि Read हो रहे Data की Size क्या है।
  • तीसरा Argument Program Control को बताता है कि File से कितने Data एक साथ प्राप्त करने हैं और
  • चौथा Argument उस File का File pointer है, जिसमे Data Stored है।

ध्‍यान दें कि fread() व fwrite() दोनों ही Function में दिये गए Arguments एक समान हैं। ये Argument हमेंशा एक समान ही होने चाहिये, तभी सही तरीके से Data Reading होती है।

इस Program में fread() Function को while Loop के अंदर Condition के रूप में लिखा गया है। जब fread() Function File से कोई Data Read करता है, तब fread() Function 1 Return करता है। लेकिन जब fread() File के अंत में पहुंचता है, जहां उसे Read करने के लिए कोई Data नहीं होता तो fread() Function 0 Return करता है और जब fread() 0 Return करता है, तब while Loop Terminate हो जाता है।

यानी जब Program Control EOF पर पहुंचता है, तो Read करने के लिए कुछ भी नहीं होता है। ऐसे में fread() Function 0 Return करता है, जिससे while Loop Terminate हो जाता है और इसका मतलब होता है कि File से सभी Data Read किये जा चुके हैं।

Buy this eBook to read more about “File System in C

rewind( );

ferror( );

C Programming Language in Hindi - BccFalna.com ये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook  C Programming Language in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी। 

C Programming Language in Hindi | Page: 477 + 265 | Format: PDF

BUY NOW GET DEMO REVIEWS