دستور های ورودی-خروجی بر اساس استفاده از فايل

Download Report

Transcript دستور های ورودی-خروجی بر اساس استفاده از فايل

‫فايل پردازی در ‪C‬‬
‫‪File based Programming in C‬‬
‫‪1‬‬
‫دستورهای خروجی بر اساس فايل‬
‫عباسپور‬
‫انواع فايل‬
‫• دودويی (باينری)‬
‫– سرعت باال (در مقايسه با پرينت)‬
‫– حجم کمتر‬
‫– امکان دسترسی تصادفی‬
‫– حفظ امنيت داده ها‬
‫• متنی‬
‫– امکان باز کردن در برنامه های ويرايش متنی مختلف‬
‫– داده ها به دلخواه برنامه نويس مرتب می شوند‬
‫– برای چاپ اطالعات‬
‫‪2‬‬
‫دستورهای خروجی بر اساس فايل‬
‫عباسپور‬
‫نحوه دستيابی به فايل ها‬
‫• دستيابی به يک فايل از طريق مراحل زير‬
‫– تعريف يک متغير برای فايل‬
‫– باز کردن فايل‬
‫– خواندن و يا نوشتن در فايل‬
‫– بستن فايل‬
‫‪3‬‬
‫دستورهای خروجی بر اساس فايل‬
‫عباسپور‬
‫تعريف فايل‬
‫• استفاده از نوع داده ای به نام ‪FILE‬‬
‫– نوعی ساختار (زير برنامه) است‬
‫– در فايل سرآمد ‪stdio.h‬‬
‫• اطالعات موجود در ساختار ‪: FILE‬‬
‫–‬
‫–‬
‫–‬
‫–‬
‫–‬
‫نام خارجی فايل (نام فايل در سيستم عامل)‬
‫نوع فايل (ورودی‪ ،‬خروجی‪ ،‬دودويی‪ ،‬متنی)‬
‫ادرس محل واسط بين برنامه و فايل‬
‫اشاره گر مکان فعلی فايل‬
‫وضعيت خطا ها در خواندن و نوشتن‬
‫‪4‬‬
‫دستورهای خروجی بر اساس فايل‬
‫عباسپور‬
‫مراحل استفاده از فايل در برنامه‬
‫‪ .1‬تعريف يک متغير از نوع اشاره گر به ساختار فايل‬
‫– مثال‪:‬‬
‫;‪FILE *inputFile‬‬
‫با اين دستور متغير ‪ inputFile‬که از نوع اشاره گر است به‬
‫ساختار ‪ FILE‬تعريف می کند‬
‫توجه‪ :‬ازعملگر * برای تعريف اشاره گر استفاده می شود‬
‫‪5‬‬
‫دستورهای خروجی بر اساس فايل‬
‫عباسپور‬
‫‪ -2‬باز کردن فايل‬
‫– استفاده از تابع ‪: fopen‬‬
‫;)] [ ‪FILE* fopen (char fileName[ ], char‬‬
‫ارگومان اين تابع حاوی دو رشته نويسه ای بعنوان پارامتر های ورودی است‬
‫و يک اشاره گر به فايل را بعنوان خروجی باز می گرداند‬
‫‪ fileName‬رشته نويسه ای است که نام خارجی فايل را مشخص می کند‪.‬‬
‫اين رشته می تواند عالوه بر نام فايل مسير فايل را نيز مشخص کند‬
‫مثال‪:‬‬
‫”‪“C:\\myletters\\letter.txt‬‬
‫به عالمت \\ توجه شود!!!‬
‫‪6‬‬
‫دستورهای خروجی بر اساس فايل‬
‫عباسپور‬
‫پارامتر ‪ mode‬در تابع ‪fopen‬‬
‫• رشته نويسه ای که نحوه باز‬
‫کردن فايل را نشان می دهد‬
‫– متشکل از دو بخش‬
‫• بخش اول تعيين کننده عمليات‬
‫قابل اجرا بر روی فايل (خواندن‬
‫و يا نوشتن)‬
‫• بخش دوم تعيين کننده نوع فايل‬
‫است (باينری ‪ b‬و متنی ‪ .) t‬پيش‬
‫فرض ‪ t‬است (متنی)‬
‫‪7‬‬
‫رشته‬
‫عمل قابل اجرا‬
‫توضیحات‬
‫‪r‬‬
‫خواندن‬
‫فایل باید از قبل موجود باشد‬
‫‪w‬‬
‫نوشتن‬
‫فایل جدید ایجاد می شود‪ .‬اگر باشد‬
‫اطالعات ان از بین می رود‬
‫‪a‬‬
‫افزودن به انتها‬
‫اگر فایل نباشد ایجاد ‪ ،‬اگر باشد به انتها‬
‫اضافه می کند‬
‫‪r+‬‬
‫خواندن و نوشتن‬
‫فایل باید موجود باشد‬
‫‪w+‬‬
‫نوشتن و خواندن‬
‫فایل جدید ایجاد می شود‪ .‬اگر باشد‬
‫اطالعات ان از بین می رود‬
‫‪a+‬‬
‫افزودن و خواندن‬
‫اگر فایل نباشد ایجاد ‪ ،‬اگر باشد به انتها‬
‫اضافه می کند‬
‫دستورهای خروجی بر اساس فايل‬
‫عباسپور‬
‫مثال باز کردن فايل‬
‫;‪FILE *inputFile‬‬
‫;(”‪inputFile=fopen )“letter.txt”, “rt‬‬
‫در اين مثال فايل ‪ letter.txt‬بصورت متنی برای خواند باز‬
‫می شود‪ .‬حال می توان با استفاده از ‪ inputfile‬داده هايی‬
‫را از اين فايل خواند‬
‫مثال‪:‬‬
‫;‪FILE *itemFile‬‬
‫;(”‪itemFile=fopen )“C:\\data\\items”, “w+t‬‬
‫‪8‬‬
‫دستورهای خروجی بر اساس فايل‬
‫عباسپور‬
‫‪ -3‬بستن فايل‬
‫• استفاده از تابع ‪fclose‬‬
‫• بستن از طريق اشاره گر تعريف شده برای آن صورت می گيرد‬
‫;‪FILE *inputFile‬‬
‫………‬
‫‪……….‬‬
‫;)‪fclose (inputFile‬‬
‫• اگر فايل بسته نشود پس از خاتمه برنامه خود بخود بسته می شود‪.‬‬
‫• اگر برنامه به هر دليلی قطع شود اطالعات آن ممکن است ناقص و‬
‫يا دچار اشکال شود‬
‫‪9‬‬
‫دستورهای خروجی بر اساس فايل‬
‫عباسپور‬
‫‪ -4‬ورودی و خروجی از فايل (خواندن و نوشتن)‬
‫• نوشتن بر روی فايل‬
‫– استفاده از تابع ‪ fprintf‬با فرم کلی زير‬
‫;)>‪fprintf (<file-pointer>,<control string>,<variable-list‬‬
‫مثال‪:‬‬
‫;‪FILE *outPut‬‬
‫;(”‪outPut=fopen )“data.txt”, “wt‬‬
‫;)‪fprintf(outPut, " %d\n",grade‬‬
‫‪10‬‬
‫دستورهای خروجی بر اساس فايل‬
‫عباسپور‬
‫مثال نوشتن‬
# include <stdio.h>
‫این برنامه میزان فروش شرکتی را در طی سال‬
main() {
‫از طریق صفحه کلید دریافت و در یک فایل ذخیره می کند‬
FILE *outFile;
int i, n,sum;
outFile= fopen ("sales.txt","wt");
if (!outFile) {
printf("can't open file");
return;
}
printf("enter the upper limit") ;
scanf("%d", &n);
sum=0;
for (i=0;i<=n ; i++){
sum=sum+I;
fprintf(outFile, " %d\n",sum);
}
fclose (outFile);
}
‫دستورهای خروجی بر اساس فايل‬
‫عباسپور‬
11
‫خواندن‬
‫• خواندن از روی فايل‬
‫– استفاده از تابع ‪ fscanf‬با فرم کلی زير‬
‫;)>‪fscanf (<file-pointer>,<control string>,<variable-addres-list‬‬
‫‪12‬‬
‫دستورهای خروجی بر اساس فايل‬
‫عباسپور‬
‫مثال خواندن‬
# include <stdio.h>
void main() {
FILE *inFile;
int sales, counter=0;
float average=0.0
inFile= fopen ("sales.txt",“rt");
if (!inFile) {
printf("can't open file");
‫اگر فايل موجود نباشد اجرا می شود‬
return;
}
printf(“calculation of average sale") ;
while (!feof (inFile)) {
average+=sales;
‫ دارای ارگومانی از نوع اشاره گر به فايل است‬feof ‫تابع‬
counter++;
fscanf(inFile,"%d", &sales);
‫در صورتی که اشاره گر به انتهای فايل برسد مقدار درست‬
}
‫(غير صفر) و در غير اينصورت مقدار نادرست (صفر) را باز می گرداند‬
fclose (inFile);
average/=counter;
printf (“average= %f”, average);
}
‫دستورهای خروجی بر اساس فايل‬
‫عباسپور‬
13