whatsapp call admin

دانلود مقاله انواع فایل از نظر نوع اطلاعات

word قابل ویرایش
37 صفحه
8700 تومان
87,000 ریال – خرید و دانلود

انواع فایل از نظر نوع اطلاعات

داده ها ممکن است در فایل به دو صورت ذخیره شوند:۱ـ اسکی یامتن(text) 2ـ بانیری(binary)

این دو روش ذخیره شدن داده ها در موارد زیر با یکدیگر تفاوت دارند:
۱ـ تعیین انتهای خط
۲ـ تعیین انتهای فایل

۳ـ نحوه ذخیره شدن اعداد بر روی دیسک
در فایل متنی اعداد به صورت رشته أی از کاراکتر ذخیره می شوند ولی در فایل بانیری اعداد به همان صورتی که در حافظه قرار می گیرند بر روی دیسک ذخیره می گردند.

در فایل متنی، کاراکتری که پایان خط را مشخص می کند در حین ذخیره شدن بر روی دیسک باید به کاراکترهای CR/LF باید به کاراکترها تعیین کننده پایان خط تبدیل شوند و بدیهی است که این تبدیلات مستلزم صرف وقت است. لذا دسترسی به اطلاعات موجود در فایلهای متنی کندتر از فایلهای بانیری است. اختلاف دیگر فایلهای متنی و بانیری در تشخیص انتهای فایل است. در مورد روش ذخیره فایل ها طول فایل توسط سیستم نگهداری می شود و انتهای فایل با توجه به این طول مشخص می گردد در حالت متنی کاراکتر ۱A ( در مبنای ۱۶) و با ۲۶( در مبنای ۱۰) مشخص کننده انتهای فایل است( این کاراکتر با فشار دادن

کلیدCTRL به همراه کلیدZ تولید می‌شود.) در حین خواندن داده ها فایل ها متنی وقتی کنترل به این کاراکتر ها رسید، بیانگر این است که داده های موجود در فایل تمام شده اند. در فایل بانیری ممکن است عدد ۱A (در مبنای ۱۶) و یا ۲۶(در مبنای ۱۰) جزئی از اطلاعات بوده بیانگر انتهای فایل نباشد. لذا نحوه تشخیص انتهای فایل در فایل بانیری با فایل متنی متفاوت است.

 

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

در این فصل به دو سازمان فایل پرداخته می شود:
۱ـ سازمان فایل ترتیبی(scquenital)
2ـ سازمان فایل تصادفی(random)
در سازمان فایل ترتیبی، رکوردها بهمان ترتیبی که از ورودی خوانده می شوند در فایل قرار می گیرند و در هنگام بازیابی به همان ترتیب که در فایل ذخیره شده اند مورد
بررسی قرار می گیرند.
فایل های ترتیبی معمولاً دارای یک فیلد کلید هستند( فیلد کلید، فیلدی است که به عنوان شاخص رکورد مورد استفاده قرار می گیرد.) و بر اساس آن مرتب می باشند. در سازمان فایل تصادفی، به هر رکورد یک شماره اختصاص می یابد لذا اگر فایل دارای n رکورد باشد رکوردها ۱ تاn شماره گذاری خواهند شد. وقتی که رکوردی در فایلی با سازمان تصادفی قرار گرفت محل آن توسط یک الگوریتم پیدا کننده آدرس که با فیلد کلید ارتباط دارد مشخص می شود. در این صورت دو رکورد با فیلد کلید مساوی، نمی توانند در فایل تصادفی وجود داشته باشند. در سازمان فایل تصادفی مستقیماً می توان به ر رکورد دلخواه دسترسی پیدا کرد.( بدون اینکه رکوردهای قبل خوانده شوند.)

باز کردن فایل
هر فایل قبل از اینکه بتواند مورد استفاده قرار گیرد باید باز شود. مواردی که در حین باز کردن فایل مشخص می شود عبارتند از:
۱ـ نام فایل
۲ـ نوع فایل از نظر ذخیره اطلاعات متنی یا بانیری
۳ـ نوع فایل از نظر ورودی ـ خروجی( آیا فایل فقط به عنوان ورودی است. آیا فقط خروجی یا هر دو)

یک فایل ممکن است طوری باز شد که فقط عمل نوشتن اطلاعات بر روی آن مجاز باشد. به چنین فایلی، فایل خروجی گفته می شود. اگر فایل طوری باز گردد که فقط عمل خواندن اطلاعات از آن امکان پذیر باشد به چنین فایلی، فایل ورودی گفته می شود. اگر فایل طوری باز شود که هم عمل نوشتن اطلاعات بر روی آن مجاز باشد و هم عمل خواندن اطلاعات از آن، به چنین فایلی ورودی ـ خروجی گفته می شود. اگر فایلی قبلاً وجود داشته باشد و به عنوان خروجی باز گردد اطلاعات قبلی آن از بین می رود. برای باز کردن فایل از تابع fopen() استفاده می گردد. این تابع که در فایل stdio.h قرار دارد به صورت زیر به کار می رود:
FILE* fopen(char *filename,*mode)

در این الگوfilename به رشته أی اشاره می کند که حاوی نام فایل و محل تشکیل یا وجود آن است. نام فایل داده از قانون نام گذاری فایل برنامه تبعیت می کند و شامل دو قسمت نام و پسوند است. بهتر است پسوند فایل داده،dat انتخاب گردد. محل تشکیل یا وجود فایل می تواند شامل نام درایو و یا مسیر موجود روی دیسک باشد.mode مشخص می کند که فایل چگونه باید باز شود( ورودی و یا خروجی و یا ورودی ـ خروجی) مقادیری که می تواند به جای mode در تابعfopen( ) قرار گیرند. همراه با مفاهیم آنها در جدول زیر:

mode مفهوم
r(r t) فایلی از نوع Text را به عنوان ورودی باز می کند.
w(wt) فایلی از نوع Text را به عنوان خروجی باز می کند.

a(at) فایلی را طوری باز می کند که بتوان اطلاعاتی را به انتهای آن اضافه نمود
(rb) فایلی از نوع بانیری را به عنوان ورودی باز می کند.

wb فایلی از نوع بانیری را به عنوان خروجی باز می کند.
ab فایل موجود از نوع بانیری را طوری باز می کند که بتوان اطلاعات را به انتهای آن اضافه نمود.
r+(r+t) فایل موجود از نوع Text را به عنوان ورودی و خروجی باز می کند.
w+(w+t) فایلی از نوع Text را به عنوان ورودی و خروجی باز می کند.

a+(a+t) فایل موجود از نوع Text را به عنوان ورودی و خروجی باز می کند.
r+b فایل موجود از نوع بانیری را به عنوان و خروجی باز می کند.
w+b فایل از نوع بانیری را به عنوان ورودی و خروجی باز می کند.

a+b فایل از نوع بانیری را به عنوان ورودی و خروجی باز می کند.
برای باز کردن فایل باید یک اشاره گر از نوع فایل تعریف گردد تا به فایلی که توسط تابع fopen باز می شود اشاره نماید. اگر فایل به دلایلی باز نشود این اشاره گر برابر با null خواهد بود. به عنوان مثال دستورات زیر را در نظر بگیرید:
(۱) FILE*fp
(2) —
دستور ۱، متغیر fp را از نوع اشاره گر فایل تعریف می کند و دستور ۲، فایلی به نام text را بر روی درایو A ایجاد مینماید.( زیرا حالت “w” ، فایل را به صورت خروجی باز می کند.)FILE ماکرویی در فایل stdio.h است. برای تشخیص اینکه آیا فایل با موفقیت باز شده است یا خیر می توان اشاره گر فایل را Null مقایسه کرد.(Null ماکرویی است که در فایل stdio.h تعریف شده است و با حروف بزرگ به کار می‌رود) اگر اشاره گر فایل برابر با Null باشد بدین معنی است که فایل باز شده است:
if((fp=fopen(“A:test”,”w”))==Null{
print f(“can not open file \n”);
exit(0);
}
بستن فایل
پس از اینکه برنامه نویس کارش را با فایل تمام کرد باید آن را ببندد. بستن فایل توسط تابع fclose( ) انجام می شود که دارای الگوی زیر است:
int fclose(FILE * fp)
در الگوی فوق،fp به فایلی اشاره می کند که باید توسط fclose ( ) بسته شود. به عنوان مثال، دستورfclose (p) فایلی را که p به آن اشاره می کند می بندد. اگر چندین فایل به طور همزمان در برنامه باز باشند می توان آنها را با تابعfcloseall( ) بست. این تابع به صورت زیر به کار می رود:
fcloseall( );
ورودی ـ خروجی کاراکترها
برای نوشتن یک کاراکتر در فایل، از توابع fputc( ),putc( ) استفاده می شود. عملکرد این دو تابع یکسان است. تابع putc( ) در گونه های جدیدfputc( ),C در گونه های قدیمیC وجود داشته است. سرعت تابعputc( ) از تابعfputc( ) بیشتر است. لذا در اینجا از تابع putc( ) استفاده می شود الگوی این تابع به صورت زیر است:
int putc (int ch,FILE*fp)
در الگوی فوق،ch کاراکتری است که باید در فایل نوشته شود وfp اشاره گری از نوع فایل است که مشخص می کند کاراکتر مورد نظر باید در چه فایلی نوشته شود.
برای خواندن کاراکترها از فایل، می توان از دو تابعfgetc( ),getc( ) استفاده نمود. نحوه بکارگیری این دو تابع یکسان است. تابعfgetc( ) در گونه های قدیمی getc( ),C در گونه های جدید C وجود دارد. سرعت اجرای تابعgetc( ) از تابع fgetc( ) بیشتر است، لذا در اینجا از تابع getc( ) استفاده می شود. الگوی این تابع به صورت زیر است:
int getc(FILE* fp)
در الگوی فوق fp اشاره گری است که مشخص می کند کاراکتر مورد نظر از کدام فایل باید خوانده شود.
در مورد خواندن و نوشتن داده ها بر روی فایل باید به نکات زیر توجه داشت:
۱ـ وقتی کاراکترهایی بر روی فایل نوشته می شوند. باید مکان بعدی، که کاراکتر آتی در آنجا قرار می گیرد مشخص باشد؛ همچنین وقتی که کاراکترهایی از فایل خوانده می شوند باید مشخص باشد که تاکنون تا کجای فایل خوانده شده است و کاراکتر بعدی از کجا باید خوانده شود. برای این منظور، سیستم از یک متغیر به نام“ موقعیت سنج فایل”(file position) استفاده می کند که با هر دستور خواندن و نوشتن بر روی فایل مقدار این متغیر به طور اتوماتیک تغییر می کند، تا موقعیت فعلی فایل را مشخص نماید. لذا عمل نوشتن بر روی فایل و عمل خواندن از روی آن، از جایی که این متغیر نشان می دهد، شروع می شود.
۲ـ در هنگام خواندن داده ها از فایل باید بتوان انتهای فایل را تست نمود؛ یعنی در برنامه باید بتوان این تست را انجام داد که اگر در حین خواندن داده ها از فایل“ موقعیت سنج فایل” به انتهای فایل رسید دستور خواندن بعدی صادر نگردد؛ چرا که در غیر این صورت، سیستم، پیام خطایی را مبنی بر نبودن اطلاعات در فایل صادر می‌کند.
در حین خواندن داده ها از فایل متنی، پس از رسیدن به انتهای فایل، تابع getc( ) یاfgetc() علامت EoF را بر می گرداند. لذا در هنگام خواندن داده ها از فایل متنی می توان آنقدر به عمل خواندن ادامه داد تا این که کاراکتر خوانده شده برابر با EoF شود. روش دیگر برای تست کردن انتهای فایل استفاده از تابع feof( ) است. الگوی این تابع به صورت زیر است:
int feof(FILE *fp)
در الگوی فوق،fp اشاره گری است که مشخص می کند این تابع باید بر روی چه فایلی عمل کند. تابع feof( ) بر تشخیص انتهای فایل های بانیری و متنی استفاده می شود. اگر اشاره گر فایلی که feof( ) به آن اشاره می کند به انتهای فایل رسیده باشد این تابع ارزش درستی وگرنه ارزش نادرستی را بر می گرداند.
ورودی ـ خروجی رشته ها
برای نوشتن رشته ها در فایل از تابعFputs( ) و برای خواندن رشته ها از فایل، از تابع Fgets( ) استفاده می گردد. الگوی این دو تابع به صورت زیر می باشد:
int Fputs(const char*str FILE* fp)
char* Fgets(char*str,int length,FILE*fp)
در الگوی فوق،fp اشاره گری است که مشخص می کند این توابع باید بر روی چند و چه فایلهایی عمل کنند در تابعfgets( ) اشاره گر str به رشته أی اشاره می کند که باید در فایل نوشته شود. این اشاره گر در تابعfputs( ) به رشته أی که اطلاعات خوانده شده از فایل در آن قرار می گیرند، اشاره می کند.
length طول رشته أی را که باید از فایل خوانده شود مشخص می کند. نحوه عمل تابعFgets( ) به این صورت است که: از ابتدای فایل شروع به خواندن می کند تا به انتهای یک خط برسد و یا رشته أی به طول length کاراکتر را از فایل بخواند. برخلاف تابعgets( ) در تابع Fgets( ) کاراکتری که انتهای خط را مشخص می کند جزء رشته أی خواهدبود که این تابع از فایل می خواند.
فایل به عنوان وسیله ورودی ـ خروجی
در مثالهایی که تاکنون مطرح شده اند، فایل یا فقط به عنوان وسیله ورودی استفاده گردیده و یا فقط به عنوان وسیله خروجی. در این قسمت مشاهده خواهد شد که چگونه می توان یک فایل را هم به عنوان وسیله ورودی و هم به عنوان وسیله خروجی مورد استفاده قرار داد؛ برای این منظور کافی است در تابعFopen( ) به جای mode از یکی از عبارات r + یا r +t ( باز کردن فایل متنی موجود به عنوان ورودی، خروجی)w + یاw+t ( ایجاد یک فایل متنی به عنوان ورودی ، خروجی) و یا a+b ( ایجاد و یا باز کردن فایل موجود بانیری به عنوان ورودی، خروجی) استفاده نمود به عنوان مثال دستورات زیر را در نظر بگیرید:
Fp1=Fopen(“test.dat”,”w+b”); (۱)
Fp2=Fopen(“sample .dat”,”r+b”); (۲)
Fp3=Fopen(“test 2.dat”,”a+t”); (۳)
دستور او فایلی به نام test.dat را از نوع بانیری و به صورت ورودی و خروجی باز می کند که اشاره گرFp1 به آن اشاره می کند. اگر فایل test.dat قبلاً وجود داشته باشد محتویات قبلی آن از بین خواهند رفت. دستور (۲) فایلی به نام sample.dat را که اکنون بر روی درایو جاری وجود دارد و از نوع بانیری و به صورت ورودی و خروجی باز می کند اگر فایل sample.dat بر روی درایو جاری وجود نداشته باشد، فایل باز نخواهد شد. دستور (۳) فایلی به نام test2.dat را از نوع متنی و به صورت ورودی و خروجی باز می کند. اگر فایلtest2.dat قبلاً وجود نداشته باشد ایجاد خواهد شد و اگر وجود داشته باشد اطلاعات قبلی آن محفوظ بوده، اطلاعات جدید به انتهای آن اضافه خواهد شد.

در حین کار با فایل ها( نوشتن اطلاعات بر روی آنها و یا خواندن اطلاعات از آنها) برای برگشت به ابتدای فایل( تغییر“ موقعیت سنج فایل”) به طوری که به ابتدای فایل اشاره می کند. باید فایل را بسته و مجدداً آن را باز نمود.(البته با توجه به مطالبی که تاکنون در مورد فایل ها گفته شد.) این مطلب در مثالهایی که تاکنون مطرح شد به چشم می خورد. اصلاً شاید در فایلهایی که فقط به عنوان خروجی و یا فقط به عنوان ورودی باز می شوند، نیاز به برگشت به ابتدای فایل( بدون بستن و باز کردن مجدد آن) احساس نشود. ولی این امر در مورد فایل هایی ورودی و خروجی به عنوان یک نیاز مطرح است. برای این منظور، از تابعی به نامrewind( ) استفاده می گردد. الگوی تابعrewind( ) در فایل stdio.h قرار داشته و به صورت زیر است:
void rewind(FILE * Fp)

در الگوی فوق Fp به فایلی اشاره می کند که “ موقعیت سنج” آن باید به ابتدای فایل اشاره نماید.
عیب یابی در ورودی ـ خروجی فایل

در حین انجام کار با فایلها ممکن است خطایی رخ دهد. به عنوان مثال، عدم وجود فضای کافی برای ایجاد فایل آماده نبودن دستگاهی که فایل باید در آنجا تشکیل گردد و یا مواردی از این قبیل منجر به بروز خطا می شود. با استفاده از تابعFerror( ) می‌توان از بروز خطا مطلع گردید. الگوی تابعFerror( ) در فایل stdio.h قرار داشته به صورت زیر است:

int Ferror (FILE *Fp)
در این الگوFp اشاره گری است که مشخص می کند تابع باید بر روی چه فایلی عمل کند. این تابع منطقی است؛ بدین معنی که اگر خطایی در رابطه با فایلها رخ دهد ارزش“ درستی” و گرنه ارزش“ نادرستی” را بر می گرداند. برای تشخیص خطا در کار با فایل ها، بلافاصله پس از هر عملی که روی فایل انجام می شود باید از این تابع استفاده نمود.

حذف فایل
برای حذف فایل های غیر ضروری می توان از تابع remove( ) استفاده کرد. الگوی این تابع در فایل stdio.h قرار داشته به صورت زیر است:
int remove(char * Filename)

در الگوی فوقFilename به نام فایلی که باید حذف شود اشاره می کند اگر عمل تابع با موقعیت انجام شود مقدار صفر و گرنه مقداری غیر از صفر برگردانده خواهد شد.
بافر(buffer)

بافر، حافظه أی است که به فایل ها اختصاص می یابد تا اعمال ورودی ـ خروجی بر روی آنها با سرعت بیشتری انجام گیرد در حین خروج از برنامه خوب است جهت اطمینان بیشتر، به ماشین دستور داد تا کلیه داده های موجود در بافرها را به فایل مربوطه منتقل نماید. برای این منظور می توان از تابع Fflush( ) استفاده نمود. اگر کار این تابع با موفقیت انجام شود مقداری که توسط آن برگردانده می شود برابر با صفر و گرنه برابر با EoF خواهد بود(EoF ماکرویی است که در فایل stdio تعریف شده است) الگوی تابع Fflush در فایلstdio.h قرار داشته و به صورت زیر است:
int Fflush(FILE *Fp)

در الگوی فوق Fp فایلی است که مشخص می کند که تابع Fflush باید بر روی آن
عمل نماید. اگرFp ذکر نشود تابع Fflush بر روی کلیه فایلهایی که به عنوان خروجی باز شده اند، عمل می کند به عنوان مثال دستور Fflush کلیه بافر های مربوط به فایل ی با اشاره گر F را در این فایل می نویسد.

این فقط قسمتی از متن مقاله است . جهت دریافت کل متن مقاله ، لطفا آن را خریداری نمایید
word قابل ویرایش - قیمت 8700 تومان در 37 صفحه
87,000 ریال – خرید و دانلود
سایر مقالات موجود در این موضوع
دیدگاه خود را مطرح فرمایید . وظیفه ماست که به سوالات شما پاسخ دهیم

پاسخ دیدگاه شما ایمیل خواهد شد