به نام خدا

سلام خدمت دوستان و هموطنان گرامی!

توی این آموزش قصد دارم یه مبحث باحال رو آموزش بدم! خوب واقعا هم کار با فایل ها لذت بخشه این یه چیزیه که کاربرد زیادی داره! پس بریم سره وقتش foot-in-mouth

خوب بدون هیج مقدمه شروع میکنم!

ببینید زبان C قابلیت کار با فایل ها رو داره! ساده ترین کار اینه که ما بیایم و با زبان C یه فایل متنی بسازیم و متنی که از کاربر دریافت میکنیم و توی اون بزاریم! یا میتونیم متن یک فایل رو توی فایل دیگه کپی کنیم! یا هرچیزه دیگه....

خوب ما همین دو کار رو انجام میدیم!

برای باز کردن فایل ها به موارد زیر نیاز داریم:

  1. نام فایل
  2. نوع فایل از نظر ذخیره اصلاعات متنی یا باینری
  3. نوع فایل از نظر ورودی و خروجی

خوب مورد سه رو بیشتر توضیح میدم. به فایل هایی که روی اونها فقط عمل نوشتن انجام میشه فایل خروجی گفته میشه! به فایلی که فقط عمل خواندن روش انجام بشه فایل ورودی گفته میشه و در نهایت به فایلی که هم قابلیت خواندن و هم نوشتن دارند هم فایل ورودی - خروجی گفته میشه!

بریم سراغ برنامه نویسی kiss

برای باز کردن یک فایل از تابع زیر، که در کتابخانه stdio.h هست استفاده میشه!

FILE *fopen (char *filename , *mode)

در این تایع filename آدرس فایل ما هست (مثلا C:test.txxt) همچنین mode مشخص میکند که فایل باید چگونه باز شود (ورودی ، خروجی ، ورودی - خروجی) مقادیری که میتوانند در تابع بالا به جای mode نوشته شوند در جدول زیر آمده است!

mode توضیح
r(rt)  فایلی از نوع 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 *fo;
fo = fopen ("c:alef-ba.txt","w");

خوب اگه دو خط بالا رو توی برنامه تون بنویسید خواهید دید که فایلی به نام alef-ba.txt در درایو C شما ایجاد خواهد شد! دلیلش اینه که w یک فایل خروجی هست و برای نوشتن استفاده میشه و چنانچه شما از قبل فایل alef-ba.txt.توی درایوتون بوده این متن جدید جایگزین متن قبلی میشه! ولی چون وجود نداره یه فایل جدید ساخته میشه!

خوب تازه داریم به جای جالبش میرسیم sealed

برای بستن فایل هم از دو تابع زیر استفاده میشه

int fclose (FILE *fo);
fcloseall();

تابع اول فایل مورد نظر رو میبنده و تابع دوم هر فایلی که باز باشه رو میبنده!

خوب رسیدیم به جای باریک....!

برای نوشتن کاراکتر در فایل متنی میشه از تابع زیر استفاده کرد!

int putc(int ch, FILE *fo)

و برای خواندن یک کاراکتر از یک فایل متنی میشه از تابع زیر استفاده کرد!

int getc (FILE  *fo)

همچنین تابع زیر تشخیص دهنده اینه که فایل به انتها رسیده و همچنین خودتون میتونید با همین تابع getc انتهای فایل رو تشخص بدید. برای اینکار باید بدونید که وقتی ما به انتهای فایل رسیدیم تابع getc مقدار EOF رو بر میگردونه EOF با حروف بزرگ یعنی End Of File که نشون دهنده پایان فایل هست! و تابع زیر هم همین کار رو میکنه!

int feof (FILE *fo)

اگه واقعا به انتهای فایل رسیده باشیم تابع بالا ارزش درستی (1) رو بر میگردونه و اگه به انتهای فایل نرسیده باشیم ارزش نادرستی (0) رو بر میگردونه!

 

برنامه زیر متنی را که از کاربر دریافت میکند را در فایلی به نام file.txt در درایو C ذخیره میکند!

#include 
#include 

int main()
{
    char ch;
    FILE *file1;
    file1=fopen("C:file.txt","w");
    if (!file1) foultfile();

    ch=getchar();
    while (ch!='#'){
    putc(ch,file1);
    ch=getchar();
    }
    fclose(file1);
    return 0;
}

void foultfile (void)
{
        printf("Exuceme. it dosen't work...!");
        exit(1);
}

 

برای حرفه ای تر شدن کار برنامه زیر رو هم میتونید ببینید! در برنامه زیر متنی رو که از کاربر دریافت شده رو در file.txt قرار میده سپس یه فایل دیگه به نام file2.txt ایجاد میکنه و متن فایل اول رو توی فایل دوم قرار میده! (برنامه ببینید میفهمید چی میگم)

#include 
#include 

int main()
{
    char ch;
    FILE *file1,*file2;
    file1=fopen("C:file.txt","w");
    if (!file1) foultfile();
    ch=getchar();

    while (ch!='#'){
    putc(ch,file1);
    ch=getchar();
    }
    fclose(file1);

    file1=fopen ("C:file.txt","r");
    if (!file1) foultfile();
    file2=fopen("C:file2.txt","w");
    if (!file2) foultfile();

    ch=getc(file1);
    while(ch!=EOF)
    {
    putc(ch,file2);
     ch=getc(file1);
    }

    return 0;
}

void foultfile (void)
{
        printf("Exuceme. it dosen't work...!");
        exit(1);
}

 

حالا شاید بخواید در زبان C یک فایل رو حذف کنید. برای اینکار از تابع زیر استفاده میشه!

int remove (char  *filename)

در تابع بالا filename آدرس فایل هست نه اشاره گر!

برای فهم بیشتر مثال زیر رو آوردم که از کاربر یک آدرس دریافت میکنه و اون فایل رو پاک میکنه!

#include <stdio.h>
#include <stdlib.h>

int main()
{
   char str[20];
   printf("Please Enter Addres file for remove: \n");
   scanf("%s",str);
   if ((remove (str)) != 0){
    printf("the file can't remove \n");
   }
   else  printf("file deleted! \n");
    return 0;
}

خوب امیدوارم مفید بوده باشه!

مخلص همتونم!

فعلا یا علی مدد...!