File Pointers

File Pointers: हर File Object दो Integer Values से Associated या सम्बंधित रहता है जिन्हें Get Pointer व Put Pointer कहा जाता है। इन्हें Current Get Position व Current Put Position भी कहा जाता है या यदि हम सरल शब्दों में कहें तो ये “File में Control के Current Position” की स्थिति को Represent करता है।

हमें अक्सर ये जरूरत पडती है कि हम File की शुरूआत पर पहुंच कर File के Data को File के End तक Read करें। इसी तरह जब हम File में Writing का काम करते हैं, तब हमें ये तय करना होता है कि हम File को Overwrite करना चाहते हैं, या File के किसी Data को Delete करके उसके स्थान पर नया Data Append करना चाहते हैं या File के अन्त में नया Data Add करना चाहते हैं।

विभिन्न प्रकार से Files को Open करने के लिए हम विभिन्न प्रकार के ios::XXX Modifiers को Use करते हैं। ये सभी File Pointer के Default Manipulations है, ताकि हम File में किसी भी Location पर Write व Read Operations Perform कर सकें। seekg() व tellg() Functions हमें ये सुविधा देते हैं कि हम Get Pointer को File में Set व Examine कर सकें और seekp() तथा tellp() Functions हमें ये सुविधा देते हैं कि हम यही काम Put Pointer के साथ कर सकें।

Specifying the Position

हमने अपने पिछले एक उदाहरण में Get Pointer को File में Position करने की प्रक्रिया को Use किया है, जहां seekg() Function File Pointer File की Beginning में Set कर देता है ताकि File की Reading शुरू से की जा सके। seekg() Function का Format केवल एक ही Argument लेता है, जो कि File में किसी Absolute Byte Position को Represent करता है। File के Starting Byte का Number 0 होता है।

Specifying the Offset

seekg() Function को दो तरीकों से Use किया जा सकता है। पहले तरीके को हमने पिछले एक उदाहरण में देख लिया है, जहां एक Single Argument File Pointer को File के Start में Place कर देता है। हम इस Function को दो Argument के साथ भी Use कर सकते हैं, जहां पहला Argument File में किसी Particular Location से आगे के Offset को Represent करता है, जबकि दूसरा Argument उस Location को Specify करता है जहां से Offset को Measure किया गया है।

इस प्रकार से Second Argument के लिए इस Function द्वारा तीन सम्भावनाऐं Represent हो सकती हैं:  beg द्वारा हम File के Beginning को Represent कर सकते हैं, cur द्वारा File Pointer के Current Position को Represent कर सकते हैं और end द्वारा File के End को Represent कर सकते हैं।

seekg(-10, ios::end);

ये Statement Put Pointer को File के End यानी EOF से 10 Byte पीछे Set कर देता है। अगले Program में हमने seekg() Function के साथ दो Argument को Use किया है, ताकि Disk पर पहले से उपलब्ध File PERSON.DAT से किसी Particular person Object को Find किया जा सके और उसके Data को Display पर Print किया जा सके।

// seekg.cpp
// seeks particular person in file

#include <fstream.h>                		// for file streams
class person                         		// class of persons
{
   protected:
	  char name[40];               		// person's name
	  int age;                    		// person's age

   public:
	  void showData(void)            	// display person's data
	  {
		 cout << "\n   Name: " << name;
		 cout << "\n   Age: " << age;
	  }
};

void main(void)
{
   person pers;                       		// create person object
   ifstream infile;                    		// create input file
   infile.open("PERSON.DAT", ios::binary); 	// open file

   infile.seekg(0, ios::end);         		// go to 0 bytes from end

   int endposition = infile.tellg();       	// find where we are

   int n = endposition / sizeof(person);   	// number of persons

   cout << "\nThere are " << n << " persons in file";

   cout << "\nEnter person number: ";
   cin >> n;

   int position = (n-1) * sizeof(person); 	// number times size
   infile.seekg(position);               	// bytes from begin
						// read one person
   infile.read( (char*)&pers, sizeof(pers) );
   pers.showData();                      	// display the person
}

// Output
   There are 3 persons in file
   Enter person number: 2

	Name: Mohan
	Age: 21

User की सुविधा के लिए हमने Items की Starting 1 से की है। हालांकि Program 0 से Numbering शुरू करता है। ये Program जो सबसे पहला काम करता है वह ये है कि ये Program File के कुल Persons की संख्‍या Calculate करता है। इसका पहला Step Get Position को निम्न Statement द्वारा File के अन्त में Position करना होता है:

infile.seekg(0, ios::end);

The tellg() Function

ये Function get Pointer की Current Position को Return करता है। Pointer को File के End में Position करने के बाद Program tellg() Function को Use करके get Pointer Position Return करता है। ये File की Bytes में Length होती है। फिर Program ये Calculate करता है कि File में कितने Objects हैं। ये पता करने के लिए Program File की Size में person Object की Size का भाग देता है। फिर Program Result Display करता है।

जैसाकि हम Output में देख सकते हैं, User File में Second Object को Specify करता है और Program seekg() Function को Use करके ये Calculate करता है कि File में Object के कितने Bytes का है। फिर Program read() Function को Use करके उस दूसरे Object के Data को उस Point से Read करता है। अन्त में ये Program Object के Data को showData() Function का प्रयोग करके Data को Display कर देता है।

File I/O Using Member Functions

अभी तक हमने Main Function में File I/O के Functions को Handle किया है। Main Function में Error Handling करना केवल Demonstration के लिए ही ठीक रहता है, लेकिन जब हम Real Programs Develop करते हैं, तब File I/O Operations को OOPS में Member Functions की तरह Use करना ही ठीक रहता है।

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

C++ Programming Language in Hindi | Page: 666 | Format: PDF

BUY NOW GET DEMO REVIEWS