دستور های ورودی-خروجی بر اساس استفاده از فايل
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