داده ها ممکن است در فایل به دو صورت ذخیره شوند:1 اسکی یامتن(text) 2 بانیری(binary)
این دو روش ذخیره شدن داده ها در موارد زیر با یکدیگر تفاوت دارند:
1 تعیین انتهای خط
2 تعیین انتهای فایل
3 نحوه ذخیره شدن اعداد بر روی دیسک
در فایل متنی اعداد به صورت رشته أی از کاراکتر ذخیره می شوند ولی در فایل بانیری اعداد به همان صورتی که در حافظه قرار می گیرند بر روی دیسک ذخیره می گردند.
در فایل متنی، کاراکتری که پایان خط را مشخص می کند در حین ذخیره شدن بر روی دیسک باید به کاراکترهای CR/LF باید به کاراکترها تعیین کننده پایان خط تبدیل شوند و بدیهی است که این تبدیلات مستلزم صرف وقت است. لذا دسترسی به اطلاعات موجود در فایلهای متنی کندتر از فایلهای بانیری است. اختلاف دیگر فایلهای متنی و بانیری در تشخیص انتهای فایل است. در مورد روش ذخیره فایل ها طول فایل توسط سیستم نگهداری می شود و انتهای فایل با توجه به این طول مشخص می گردد در حالت متنی کاراکتر 1A ( در مبنای 16) و با 26( در مبنای 10) مشخص کننده انتهای فایل است( این کاراکتر با فشار دادن کلیدCTRL به همراه کلیدZ تولید میشود.) در حین خواندن داده ها فایل ها متنی وقتی کنترل به این کاراکتر ها رسید، بیانگر این است که داده های موجود در فایل تمام شده اند. در فایل بانیری ممکن است عدد 1A (در مبنای 16) و یا 26(در مبنای 10) جزئی از اطلاعات بوده بیانگر انتهای فایل نباشد. لذا نحوه تشخیص انتهای فایل در فایل بانیری با فایل متنی متفاوت است.
سازمان فایل
منظور از سازمان فایل این است که اطلاعات در فایل چگونه ذخیره می شوند و سپس به چه روشهایی مورد بازیابی قرار می گیرند. به عبارت دیگر قانون حاکم بر نحوه ذخیره و بازیابی داده ها را در فایل، سازمان فایل گویند.
در این فصل به دو سازمان فایل پرداخته می شود:
1 سازمان فایل ترتیبی(scquenital)
2 سازمان فایل تصادفی(random)
در سازمان فایل ترتیبی، رکوردها بهمان ترتیبی که از ورودی خوانده می شوند در فایل قرار می گیرند و در هنگام بازیابی به همان ترتیب که در فایل ذخیره شده اند مورد
بررسی قرار می گیرند.
فایل های ترتیبی معمولاً دارای یک فیلد کلید هستند( فیلد کلید، فیلدی است که به عنوان شاخص رکورد مورد استفاده قرار می گیرد.) و بر اساس آن مرتب می باشند. در سازمان فایل تصادفی، به هر رکورد یک شماره اختصاص می یابد لذا اگر فایل دارای n رکورد باشد رکوردها 1 تاn شماره گذاری خواهند شد. وقتی که رکوردی در فایلی با سازمان تصادفی قرار گرفت محل آن توسط یک الگوریتم پیدا کننده آدرس که با فیلد کلید ارتباط دارد مشخص می شود. در این صورت دو رکورد با فیلد کلید مساوی، نمی توانند در فایل تصادفی وجود داشته باشند. در سازمان فایل تصادفی مستقیماً می توان به ر رکورد دلخواه دسترسی پیدا کرد.( بدون اینکه رکوردهای قبل خوانده شوند.)
باز کردن فایل
هر فایل قبل از اینکه بتواند مورد استفاده قرار گیرد باید باز شود. مواردی که در حین باز کردن فایل مشخص می شود عبارتند از:
1 نام فایل
2 نوع فایل از نظر ذخیره اطلاعات متنی یا بانیری
3 نوع فایل از نظر ورودی خروجی( آیا فایل فقط به عنوان ورودی است. آیا فقط خروجی یا هر دو)
یک فایل ممکن است طوری باز شد که فقط عمل نوشتن اطلاعات بر روی آن مجاز باشد. به چنین فایلی، فایل خروجی گفته می شود. اگر فایل طوری باز گردد که فقط عمل خواندن اطلاعات از آن امکان پذیر باشد به چنین فایلی، فایل ورودی گفته می شود. اگر فایل طوری باز شود که هم عمل نوشتن اطلاعات بر روی آن مجاز باشد و هم عمل خواندن اطلاعات از آن، به چنین فایلی ورودی خروجی گفته می شود. اگر فایلی قبلاً وجود داشته باشد و به عنوان خروجی باز گردد اطلاعات قبلی آن از بین می رود. برای باز کردن فایل از تابع fopen() استفاده می گردد. این تابع که در فایل stdio.h قرار دارد به صورت زیر به کار می رود:
FILE* fopen(char *filename,*mode)
در این الگوfilename به رشته أی اشاره می کند که حاوی نام فایل و محل تشکیل یا وجود آن است. نام فایل داده از قانون نام گذاری فایل برنامه تبعیت می کند و شامل دو قسمت نام و پسوند است. بهتر است پسوند فایل داده،dat انتخاب گردد. محل تشکیل یا وجود فایل می تواند شامل نام درایو و یا مسیر موجود روی دیسک باشد.mode مشخص می کند که فایل چگونه باید باز شود( ورودی و یا خروجی و یا ورودی خروجی) مقادیری که می تواند به جای mode در تابعfopen( ) قرار گیرند. همراه با مفاهیم آنها در جدول زیر: