فایل ها.

Slides:



Advertisements
Similar presentations
Awe sim.
Advertisements

معاونت درمان امور مامایی اردیبهشت 90. برای ثبت اطلاعات در برنامه نرم افزاری نظام مراقبت مرگ پریناتال ابتدا لازم است برنامه نرم افزار info-path وپرنیان.
Decision Tree.
دستورهای خروجی بر اساس فايل عباسپور 1 دستور های ورودی-خروجی بر اساس استفاده از فايل File-based Input and Output.
مراحل مختلف اجرای يک برنامه
فایل پردازی در C File based Programming in C. انواع فایل متنی –سرعت بالا –حجم کمتر –امکان دسترسی تصادفی –حفظ امنیت داده ها دودویی (باینری) –امکان باز.
1 Network Address Translation (NAT). 2 Private Network شبکه خصوصی شبکه ای است که بطور مستقیم به اینترنت متصل نیست در یک شبکه خصوصی آدرس های IP به دلخواه.
1 بنام خدا زبان برنامه نویسی C (21814( Lecture 14 Structures.
Database Laboratory: Session #4 Akram Shokri. DB-Lab 2 Lab Activity You must already created all tables You have to have inserted proper data in tables.
به نام خدا برنامه سازی سمت سرور (php)
1 بنام خدا زبان برنامه نویسی C (21814( Lecture 9 Selected Topics.
1 بنام خدا زبان برنامه نویسی C (21814( Lecture 8 Chapters 8 & 9.
مظفر بگ محمدی دانشگاه ایلام Generics. کدهای عمومی 2 یکی از اهداف OOP ایجاد قابلیت نوشتن برنامه های عمومی با قابلیت استفاده ی مجدد است. کدهای چندریخت تا.
آشنايي با سيستم اعداد.
Cost- Effectiveness Analysis
[c.
آزمایشگاه پایگاه داده ها ایجاد جدول در پایگاه داده در SQL Server
تهیه و تنظیم: فاطمه قاسمی دانشگاه صنعتی شریف – پاییز 86
تهیه و تنظیم: فاطمه قاسمی دانشگاه صنعتی شریف – پاییز 86
تمرین هفتم بسم الله الرحمن الرحیم درس یادگیری ماشین محمدعلی کیوان راد
ویژگی های DHCP جلوگیری از Conflict سرعت بخشیدن به کارها مدیریت متمرکز
فصل اول: رسانه های ذخیره سازی
بنام خدا زبان برنامه نویسی C (21814( Lecture 12 Selected Topics
SY800 router mode [AD-14-TB ].
دانلود جدیدترین مقالات برق الکترونیک و کامپیوتر
آشنایی مقدماتی با نرم افزار Endnote X4
آرايه ها.
ساختمان داده ها جداول درهم سازی
Address: Times New Roman, size 34
آزمایشگاه پایگاه داده ها قیود در جداول یک پایگاه داده در SQL Server
واحد های مختلف برنامه عباسپور
چگونه بفهمیم آیا ژورنالی ISI است؟ ایمپکت فاکتور دارد یا خیر؟
آشنايي با برنامه نويسي به زبان C++
بنام خدا زبان برنامه نویسی C (21814( Lecture 10 Chapter 11
فصل دوم جبر بول.
Route configuration for 5400W ADSL Router
به نام حق مبحث: ارث بری Inheritance.
تکنیک دیماتل DEMATEL: decision making trial and evaluation laboratory.
Microsoft Visual Basic
بررسی قطبش در لیزر های کاواک عمودی گسیل سطحی(vcsel)
SSO Single Sign-on Systems
آشنایی با پایگاه داده mysql
آموزش کرک کردن نرم افزار ACTIVE HDL
(Structured Query Language)
Tree Sort.
مدارهای منطقی فصل سوم - خصوصیات توابع سويیچی
آشنایی مقدماتی با نرم افزار Endnote X4
سميرا قانوني زهرا معدني
هیدرولیک جریان در کانالهای باز
تهیه و تنظیم: فاطمه قاسمی دانشگاه صنعتی شریف – پاییز 86
بنام خدا زبان برنامه نویسی C (21814( Lecture 3 Chapter 4
تهیه و تنظیم: فاطمه قاسمی دانشگاه صنعتی شریف – پاییز 86
Bucket sort اكرم منوچهري زهرا منوچهري
Ali Karimpour Associate Professor Ferdowsi University of Mashhad
وبلاگ جامع مهندسی برق و الکترونیک
راهنمای استفاده از ابزار Mailings در Ms Word
آشنایی مقدماتی با نرم افزار Endnote X4
به نام خدا اين فايل راهنما جهت آشنايی کاربران گرامی با پايگاه اطلاعاتی Sciencedirect و نحوه جستجوی اطلاعات در آن تهيه شده است لطفاً اسلايدهای بعد را مشاهده.
بسم الله الرحمن الرحیم هرس درخت تصمیم Dr.vahidipour Zahra bayat
آشنایی مقدماتی با نرم افزار Endnote
کاربرد کامپیوتر در داروخانه
جستجوی منابع الکترونیک
به نام خدا Koha برنامه.
فصل ششم مدارهای ترتیبی.
مثال : فلوچارتي رسم كنيد كه دو عدد از ورودي دريافت كرده بزرگترين عدد
دکتر مظفر بگ محمدی دانشگاه ایلام
عملیات با رشته‌ها موسوی ندوشنی ویراست 1389 دانشگاه صنعت آب و برق.
kbkjlj/m/lkiubljj'pl;
مباني كامپيوتر و برنامه سازي Basics of Computer and Programming
مباني كامپيوتر و برنامه سازي Basics of Computer and Programming
Presentation transcript:

فایل ها

لزوم استفاده از فایل ها: داده های ذخیره شده در متغییر ها ، اشیاء و آرایه ها که تاکنون از آنها برای ذخیره اطلاعات استفاده می کردیم در حافظهRAM تشکیل می شوند و با قطع جریان برق از بین می روند برای رفع این مشکل داده ها را بر روی حافظه های جانبی مثل دیسک های مغناطیسی ، دیسک های نوری و نوار باید ذخیره کرد . منبع ذخیره و بازیابی داده ها بر روی حافظه جانبی را فایل گویند .

C++ فایل ها را به صورت مجموعه ای از بایت ها در نظر می گیرد

انواع فايل از نظر نوع اطلاعات : داده ها در فایل به دو صورت نوشته می شوند : 1- متن 2- باینری در هر دو روش، دنباله ای از بایتها داخل حافظه دائمی نوشته میشوند. در روش متنی، هنگام نوشتن اطلاعات در فایل، داده ها بصورت دنباله ای از کالاکترها نوشته میشوند و هنگام خواندن اطلاعات نیز باید عکس این عمل اتفاق بیافتد. ولی در روش باینری، اطلاعات همانگونه که در RAM هستند به حافظه دائمی منتقل میشوند.

مثال در نظر بگیرید که عدد صحیح دو بایتی n=2345 را میخواهیم درون فایل ذخیره کنیم. حالت اول) اگر فایل را بصورت متنی ایجاد و از توابع خواندن و نوشتن متنی استفاده کنیم، هنگام نوشتن عدد n، چهار بایت درون فایل نوشته میشود. که به ترتیب کد اسکی عدد 2، کد اسکی عدد 3 ، کد اسکی عدد 4 و کد اسکی عدد 5 است. یعنی مجموعاً فایل ایجاد شده حاوی 4 بایت خواهد بود. (2345)(‘2’,’3’,’4’,’5’)(50,51,52,53) (0x32,0x33,0x34,0x35) حالت دوم) اگر فایل را بصورت باینتری ایجاد و از توابع خواندن و نوشتن باینتری استفاده کنیم. عدد n بصوت 2 بایت یعنی به شکل زیر ذخیره میشود. (2345) (0X0929)

- تبدیل فرمت در فایل متنی نکته : این تبدیلات مستلزم صرف وقت است بنابراین دسترسی به اطلاعات موجود در فایل متنی کندتر از فایل های باینری است . از آنجا که یک فایل متنی را با مرورگرهای مختلف میتوان خواند لذا ایجاد و کار با فایلهای متنی از اهمیت بالایی برخوردارند.

لذا نحوه تشخیص انتهای فایل در فایل باینری با فایل متنی متفاوت است . تعیین انتهای فایل : در هر دو روش ذخیره فایل ، طول فایل توسط سیستم نگهداری می شود و انتهای فایل با توجه به این طول مشخص می شود . در حالت متنی کاراکتر EOF كه معادل 0xff و يا -1 است، مشخص کننده انتهای فایل است. لذا نحوه تشخیص انتهای فایل در فایل باینری با فایل متنی متفاوت است .

کلاس های فایل : برای ورودی-خروجی فایل باید فایل <fstream.h> را به برنامه C++ ضمیمه کرد: #include <fstream.h> ios ostream istream ofstream ifstream fstream fstreambase

نام فایل از ترکیبی از حروفa تا z و خط ربط_ تشكيل ميشود باز کردن و بستن فایل : هر فایل قبل از اینکه مورد استفاده قرار گیرد باید باز شود. هنگام باز کردن فایل ، موارد زیر باید مشخص شوند : 1. نام فایل داده 2. نوع فایل از نظر ذخیره اطلاعات متنی یا باینری 3. نوع فایل از نظر ورودی – خروجی نام فایل از ترکیبی از حروفa تا z و خط ربط_ تشكيل ميشود

برای باز کردن فایل ابتدا باید مجرایی را از نوع این کلاس ها تعریف کرد و سپس فایلی را به این مجرا ها نسبت داد . ifstream f1; //input stream ofstream f2; //output stream fstream f3; //input output stream دستور سوم , f2دستور دوم مجرای خروجی , f1دستور اول مجرای ورودی را ایجاد می کند f3مجرای ورودی-خروجی

حالت فایل دو چیز را مشخص می کند : 1. عملی که با فایل باید انجام شود حالت فایل : حالت فایل دو چیز را مشخص می کند : 1. عملی که با فایل باید انجام شود 2. روش ذخیره اطلاعات از نظر متنی یا باینری بودن سه عمل را می توان با فایل انجام داد : 1. عمل ورودی (در این حالت فایل طوری باز میشود که فقط می توان اطلاعات را از آن خواند این فایل را فایل ورودی گویند) 2. عمل خروجی(در این حالت فایل طوری باز میشود که فقط می توان اطلاعات را در آن نوشت اين فایل را فایل خروجی گویند) 3. عمل ورودی- خروجی (در این حالت فایل طوری باز میشود که همزمان می توان اطلاعات را از آن خواند و نوشت این فایل را فایل ورودی-خروجی گویند )

حالت فایل :

مثال : ofstream f1; ifstream f2; fstream f3; f1.open (“data1.dat” , ios::out); f2.open (“data2.dat” , ios::in); f3.open (“data3.dat” , ios::in | ios::out);

نکته : قبل از کار با فایل باید از باز بودن فایل اطمینان حاصل کرد برای این کار می توان از دستورات زیر استفاده کرد . if(!myfile) { cout<<“can not open file”; … } نام مجرای ماست) myfile( یا می توان از تابع is_open() استفاده کرد در صورت باز بودن فایل ارزش درستی در غیر این صورت ارزش نادرستی را برمی گرداند . if(!myfile.is_open()) }

نکته : حتماً بعد از استفاده از فایل باید فایل را بست . هنگام بسته شدن برنامه تمام فایل های باز آن بسته می شوند . تعداد فایل هایی که در هر برنامه می توان باز نگه داشت محدود است . در برخی از کاربرد ها اگر متوجه فایل های باز نباشیم ممکن است از حد متعارف تجاوز کنیم. براي بستن يك فايل از تابع close استفاده ميكنيم: my file.close();

از اعمالی هنگام خواندن داده ها باید انجام دهیم ، تست انتهای فایل است . تست انتهای فایل : از اعمالی هنگام خواندن داده ها باید انجام دهیم ، تست انتهای فایل است . به بیان دیگر یعنی باید هنگام خواندن اطلاعات از فایل به طریقی تشخیص دهیم که به انتهای فایل رسیدیم یا خیر . برای تست انتهای فایل از تابع eof() استفاده می کنیم bool ios::eof(); اگر فایلی که این تابع بر روی آن عمل می کند به انتها رسیده باشد ، این تابع ارزش درستی و گرنه ارزش نادرستی را برمی گرداند .

برنامه اي بنويسيد كه فايل aa.txt را در فايل bb.txt كپي كند

void main() { ifstream InFile; ofstream OutFile; InFile. open("c:\\aa void main() { ifstream InFile; ofstream OutFile; InFile.open("c:\\aa.txt",ios::in); if (InFile.is_open()==false) cout<<"Can not open input file"; return; } OutFile.open("c:\\bb.txt",ios::out); if(OutFile.is_open()==false) cout<<"Can not open output file"; InFile.close(); //Close the input file while(!InFile.eof()) char ch; InFile.get(ch); OutFile.put(ch); InFile.close(); OutFile.close();

شیوه های ذخیره و بازیابی اطلاعات : 1. داده ها کاراکتر به کاراکتر در فایل نوشته می شوند سپس کاراکتر به کاراکتر از فایل خوانده می شوند. 2. داده ها به صورت رشته ای از کاراکتر ها در فایل نوشته و سپس به همان شکل از فایل خوانده می شوند. 3. داده ها در حین نوشتن بر روی فایل ، با فرمت خاصی نوشته و سپس به همان فرمت خوانده می شوند. 4. داده ها به شکل ساختمان (رکورد) بر روی فایل نوشته شده سپس به صورت ساختمان از فایل خوانده می شوند.

توابع ورودی: توابع ورودی و خروجی : توابع خروجی: نوشتن در فایل با استفاده از اپراتور << put(ch)یک بایت در فایل می نویسد. write(buff , size) آدرس يك خانه و تعداد بايتها را گرفته و آنرا در فایل می نویسد. توابع ورودی: خواندن از فایل با استفاده از اپراتور >> get(ch) یک بایت از فایل خوانده و درون ch قرار می هد. تابع get كه حالتهاي مختلف دارد و يكي از حالتهاي آن get(str , max) ميباشد كه با توجه به تعداد كاراكتر وارد شده از فايل خوانده و در آرايه str قرار می دهد. تابع getline(str , max , DELIM) یک خط از فایل ورودی را خوانده تا به كاركتر DELIM ويا تعداد بايت خوانده شده به اندازه max برسد. read(buff , size) آدرس يك خانه و تعداد بايتها را گرفته و تعداد بايد خواسته شده را از فايل ميخواند و در بافر قرار می دهد.

از بين توابع معرفي شده در اسلايد قبل دو تابع read و write براي فايلهاي باينري استفاده ميشوند

مثال: void main() { char ch = 'x' ; int j = 77 ; double d=7.66 ; char str1[] ="ali" ; char str2[] ="programmer" ; ofstream outfile("c:\\fdata.txt"); outfile<< j <<endl<<ch <<endl << d <<endl << str1 <<endl << str2 ; cout << "file written" ; }

مثال ذخیره اطلاعات دانشجو در فایل: در این مثال یک کلاس دانشجو داریم که مشخصات یک دانشجو را توسط تابع write2file() درفایل ذخیره میکند. در صورتی که این تابع بدون آرگومان فراخوانی شود یک فایل هم نام با شماره دانشجویی ایجادگردد . void student::write2file(char *fname); void student:: write2file();

مثال ذخیره اطلاعات دانشجو در فایل: class student { private: int stcode; char stname[100]; char address[200]; int age; public : student (int code , char * name, char addr , int age); void write2file(char * fname); void write2file(); };

void student::write2file() { char fname [200]; sprintf (fname , "d:\\% d.txt", stcode ); write2file(fname); } void student ::write2file(char *fname) ofstream outf (fname); outf<< stcode << endl; outf<< stname << endl; outf.close(); اين تابع اطلاعات دانشجو را در فايل متني مينويسد

نحوه استفاده از تابع main() { student st (862161900, " Reza ", "Iran-Tehran-Shahed Un.", 18); st.write2file(" d:\\tmp.txt "); st.write2file(); }

مثال خواندن و نوشتن اطلاعات آرایه در فایل باینری: void WriteArray2File(int numbers[100]) { ofsream outfile(“c:\\test.dat” , ios :: binary); outfile.write( ( char *) numbers , 100 * sizeof (int)); outfile.close(); } void ReadArrayFromFile(int numbers[100]) ifstream inf(“c:\\test.dat” , ios :: binary); inf.read ( ( char *) numbers , 100 * sizeof (int)); inf.close();

مثال خواندن و نوشتن اطلاعات يك شي در فایل باینری: void MyClass::Write2File(char *fname) { ofsream outfile(fname , ios :: binary); outfile.write( ( char *) this , sizeof (MyClass)); outfile.close(); } void MyClass::ReadFromFile(char *fname) ifstream inf(fname, ios :: binary); inf.read (( char *) this , sizeof (MyClass)); inf.close();

مثال : برنامه اي بنويسيد كه يك فايل متني را روي صفحه نمايش دهد void main () { char buff [100]; ifstream infile(“test.txt”) ; while (!infile.eof()) infile.getline (buff , 100); cout<<buff <<endl; } infile.close();

تمرين 6: كلاس ليست پيوندي ر ا تغيير داده و توابع مورد نياز براي خواندن و نوشتن ليست پيوندي در فايل را تعريف نماييد

تغییر موقعیت اشاره گر فایل : سیستم برای هر فایل دو اشاره گر در نظر می گیرد . یکی اشاره گر خواندن و دیگری اشاره گر نوشتن . اشاره گر خواندن مشخص می کند که دستور خواندن بعدی از فایل ازکجا باید بخواند و اشاره گر نوشتن در فایل مشخص می کند که دستور نوشتن بعدی در فایل ، در کجای فایل باید بنویسد . با هر دستور خواندن و نوشتن این دو اشاره گر به طور خودکار تغییر می کنند. استفاده می شود. seekp , seekg برای تغییر اشاره گر های فایل از دو تابع istream &seekg(num , origin); ostream &seekp(num , origin); مشخص می کند که اشاره گر چند بایت باید جابجا شود و numدر هر دو مشخص می کند که مبدا حرکت کجا باشد .Origin

جدول مبدا حرکت اشاره گر فایل :

تغیین موقعیت فعلی اشاره گر فایل : با استفاده از توابع tellp() , tellg() می توان تشخیص دادکه اشاره گر خواندن و نوشتن فایل در کجای فایل قرار دارند . pos_type tellg(); pos_type tellp(); همانطور که قبلاً بیان شد، ميتوان با استفاده از توابع seekg و seekp اشاره گر خواندن و نوشتن در فايل را جابجا نمود. istream &seekg (pos_type pos); ostream &seekp (pos_type pos);

تابع نوشتن در فايل دانشجو را به گونه اي تغيير دهيد كه هنگام نوشتن اطلاعات با توجه به شماره دانشجويي به موقعيت مترادف با شماره دانشجويي رفته و در آن مكان اطلاعات دانشجو نوشته شود همچنين تابع خواندن از فايل دانشجو را به گونه اي بنويسيد كه شماره دانشجويي را گرفته و پس از انتقال اشاره گر خواندن از فايل به موقعيت مترادف، اطلاعات دانشجو را بخواند.

void student ::write2file(char void student ::write2file(char *fname) { ofstream outf (fname , ios :: binary); outf.seekp(stcode * sizeof(student) , ios :: beg); outf.write( ( char *) this , sizeof (student)); outf.close(); } void MyClass::ReadFromFile(int code, char *fname) ifstream inf(fname, ios :: binary); inf.seekg(code * sizeof (student) , ios :: beg); inf.read (( char *) this , sizeof (student)); inf.close();

istream& operator >>(istream & is , student &st); بخش دوم تمرين 6 با استفاده از توابع دوست و سربارگذاري عملگرها دو اپراتور << و >> را به گونه اي بنويسيد كه مشخصات دانشجو را درون فايل متني بنويسد و بخواند. براي نوشتن اين اپراتورها به شكل زير عمل كنيد: istream& operator >>(istream & is , student &st); ostream& operator <<(ostream & os , student &st); اين اپراتورها براي كلاسهاي istream و ostream تعريف شده اند بررسي نماييد درصورتي كه از اشياء ifstream و ofstream استفاده شود چه اتفاقي مي‌افتد.