تبلیغات :
آکوستیک ، فوم شانه تخم مرغی، صداگیر ماینر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




صفحه 4 از 6 اولاول 123456 آخرآخر
نمايش نتايج 31 به 40 از 54

نام تاپيک: آموزش پيشرفته C

  1. #31
    آخر فروم باز Nesta's Avatar
    تاريخ عضويت
    Jan 2005
    محل سكونت
    tehran
    پست ها
    3,343

    پيش فرض

    منظور از سازمان فايل اين است كه اطلاعات در فايل چگونه ذخيره شده و سپس به
    چه روش هايي مورد بازيابي قرار مي گيرند . يا بعبارت ديگر قانون حاكم بر نحوه
    ذخيره و بازيابي داده ها و فايل را سازمان فايل گويند . حال به دو سازمان فايل
    پرداخته مي شود : 1
    سازمان فايل ترتيبي (sequential) . 2
    سازمان فايل تصادفي (random) .
    در سازمان فايل ترتيبي ، ركوردها به همان ترتيبي كه از ورودي خوانده ميشوند
    در فايل قرار مي گيرند و در هنگام بازيابي ، به همان ترتيبي كه در فايل ذخيره
    شده اند مورد دسترسي قرار مي گيرند . بعنوان مثال اگر صدمين ركورد فايل بخواهد
    مورد دسترسي قرار گيرد، بايد 99 ركورد قبل از آن از فايل خوانده شوند. فايلهاي
    ترتيبي معمولا" داراي يك فيلد كليد هستند . ( فيلد كليد ، فيلدي است كه بعنوان
    شاخص ركورد مورد استفاده قرار ميگيرد ) و بر اساس آن ، مرتب ميباشند ( شكل 1 ).
    بعنوان مثال در مورد دانشجويان ، شماره دانشجويي و در مورد كارمندان شماره
    كارمندي ، فيلد خوبي براي شاخص فرد مي باشند .
    شماره شناسايي نام موضوع درس نمره 12
    Ahmad پاسكال 20 23
    Ali پاسكال 15 34
    Reza پاسكال 18 20 C Jafar 56

    شكل (1) . نمونه اي از يك فايل ترتيبي

    در سازمان فايل تصادفي ، به هر ركورد يك شماره اختصاص مي يابد . لذا اگر
    فايل داراي n ركورد باشد ، ركوردها از 1تا nا شماره گذاري خواهند شد . وقتي كه
    ركوردي در يك فايل با سازمان تصادفي قرار گرفت ، محل آن توسط يك الگوريتم پيدا
    كننده آدرس ، كه با فيلد كليد ارتباط دارد مشخص مي شود . در اين صورت دو ركورد
    با فيلد كليد مساوي ، نمي توانند در فايل تصادفي وجود داشته باشند . در سازمان
    فايل تصادفي مستقيما" مي توان به هر ركورد دلخواه دسترسي پيدا كرد ( بدون اين
    كه ركوردهاي قبل از آن خوانده شوند ) . شكل (2) نمونه اي از يك فايل تصادفي را
    نمايش مي دهد .
    شماره ركورد شماره شناسايي نام موضوع درس نمره 13
    12 Ahmad پاسكال 20 20 C Jafar 56 20
    24
    23 Ali پاسكال 15 31
    34 Reza پاسكال 18
    ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤ اي از فايل تصادفي

  2. #32
    آخر فروم باز Nesta's Avatar
    تاريخ عضويت
    Jan 2005
    محل سكونت
    tehran
    پست ها
    3,343

    پيش فرض

    منظور از سازمان فايل اين است كه اطلاعات در فايل چگونه ذخيره شده و سپس به
    چه روش هايي مورد بازيابي قرار مي گيرند . يا بعبارت ديگر قانون حاكم بر نحوه
    ذخيره و بازيابي داده ها و فايل را سازمان فايل گويند . حال به دو سازمان فايل
    پرداخته مي شود : 1
    سازمان فايل ترتيبي (sequential) . 2
    سازمان فايل تصادفي (random) .
    در سازمان فايل ترتيبي ، ركوردها به همان ترتيبي كه از ورودي خوانده ميشوند
    در فايل قرار مي گيرند و در هنگام بازيابي ، به همان ترتيبي كه در فايل ذخيره
    شده اند مورد دسترسي قرار مي گيرند . بعنوان مثال اگر صدمين ركورد فايل بخواهد
    مورد دسترسي قرار گيرد، بايد 99 ركورد قبل از آن از فايل خوانده شوند. فايلهاي
    ترتيبي معمولا" داراي يك فيلد كليد هستند . ( فيلد كليد ، فيلدي است كه بعنوان
    شاخص ركورد مورد استفاده قرار ميگيرد ) و بر اساس آن ، مرتب ميباشند ( شكل 1 ).
    بعنوان مثال در مورد دانشجويان ، شماره دانشجويي و در مورد كارمندان شماره
    كارمندي ، فيلد خوبي براي شاخص فرد مي باشند .
    شماره شناسايي نام موضوع درس نمره 12
    Ahmad پاسكال 20 23
    Ali پاسكال 15 34
    Reza پاسكال 18 20 C Jafar 56

    شكل (1) . نمونه اي از يك فايل ترتيبي

    در سازمان فايل تصادفي ، به هر ركورد يك شماره اختصاص مي يابد . لذا اگر
    فايل داراي n ركورد باشد ، ركوردها از 1تا nا شماره گذاري خواهند شد . وقتي كه
    ركوردي در يك فايل با سازمان تصادفي قرار گرفت ، محل آن توسط يك الگوريتم پيدا
    كننده آدرس ، كه با فيلد كليد ارتباط دارد مشخص مي شود . در اين صورت دو ركورد
    با فيلد كليد مساوي ، نمي توانند در فايل تصادفي وجود داشته باشند . در سازمان
    فايل تصادفي مستقيما" مي توان به هر ركورد دلخواه دسترسي پيدا كرد ( بدون اين
    كه ركوردهاي قبل از آن خوانده شوند ) . شكل (2) نمونه اي از يك فايل تصادفي را
    نمايش مي دهد .
    شماره ركورد شماره شناسايي نام موضوع درس نمره 13
    12 Ahmad پاسكال 20 20 C Jafar 56 20
    24
    23 Ali پاسكال 15 31
    34 Reza پاسكال 18
    ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤ اي از فايل تصادفي

  3. #33
    آخر فروم باز Nesta's Avatar
    تاريخ عضويت
    Jan 2005
    محل سكونت
    tehran
    پست ها
    3,343

    پيش فرض

    هر فايل قبل از اين كه بتواند مورد استفاده قرار گيرد ، بايد باز گردد .
    مواردي كه در حين باز كردن فايل مشخص مي شوند عبارتند از : 1
    نام فايل 2
    نوع فايل از نظر ذخيره اطلاعات (textيا binaryا) 3
    نوع فايل از نظر ورودي خروجي ( آيا فايل فقط به عنوان ورودي است ، آيا
    فقط بعنوان خروجي است يا هم بعنوان ورودي است و هم بعنوان خروجي ) .
    يك فايل ممكن است طوري باز شود كه فقط عمل نوشتن اطلاعات بر روي آن مجاز
    باشد . به چنين فايلي ، فايل خروجي گفته مي شود . اگر فايل طوري باز گردد كه
    فقط عمل خواندن اطلاعات از آن امكان پذير باشد به چنين فايلي ، فايل ورودي گفته
    مي شود . اگر فايل طوري باز شود كه هم عمل نوشتن اطلاعات بر روي آن مجاز باشد و
    هم عمل خواندن اطلاعات از آن ، به چنين فايلي ، فايل ورودي و خروجي گفته ميشود.
    اگر فايلي قبلا" وجود نداشته باشد ، در حين باز شدن بايد بعنوان فايل خروجي باز
    شود . اگر فايلي قبلا" وجود داشته باشد و بعنوان خروجي باز گردد ، اطلاعات قبلي مي رود ، براي باز كردن فايل از تابع ()fopen استفاده مي گردد .

  4. #34
    آخر فروم باز Nesta's Avatar
    تاريخ عضويت
    Jan 2005
    محل سكونت
    tehran
    پست ها
    3,343

    پيش فرض

    تابع ()fopen براي باز كردن فايل مورداستفاده قرار گرفته و داراي الگوي زير
    است : FILE *fopen(char *filename / *mode)

    در الگوي فوق ، filename به رشته اي اشاره مي كند كه حاوي نام فايل و محل
    تشكيل يا وجود آن است . نام فايل داده از قانون نامگذاري فايل برنامه تبعيت
    مي كند و شامل دو قسمت : نام و انشعاب است كه بهتر است انشعاب فايل داده ، dat
    انتخاب گردد . محل تشكيل يا وجود فايل مي تواند شامل نام درايو و يا هر مسير
    موجود روي ديسك باشد . mode مشخص مي كند كه فايل چگونه بايد باز شود ( ورودي
    خروجي و يا ... ) . مقاديري كه ميتوانند بجاي mode در تابع ()fopen قرار گيرند
    همراه با مفاهيم آنها در جدول زير آمده اند . mode
    مفهوم
    (rt)r فايلي از نوع text را به عنوان ورودي باز مي كند
    (wt)w فايلي از نوع text را به عنوان خروجي باز مي كند
    (at)a فايل را طوري بازميكند كه بتوان اطلاعاتي را به انتهاي آن اضافه
    نمود rb
    فايلي از نوع باينري را به عنوان ورودي باز مي كند wb
    فايلي از نوع باينري را به عنوان خروجي باز مي كند ab
    فايل موجود از نوع باينري را طوري باز مي كند كه بتوان اطلاعاتي
    را به انتهاي آن اضافه نمود
    (r+t)r+ فايل موجود از نوع text را به عنوان ورودي و خروجي باز مي كند
    (w+t)w+ فايلي از نوع text را به عنوان ورودي و خروجي باز مي كند
    (a+t)a+ فايل موجود از نوع text را به عنوان ورودي و خروجي باز مي كند r+b
    فايل موجود از نوع باينري را به عنوان ورودي و خروجي باز ميكند w+b
    فايل از نوع باينري را به عنوان ورودي و خروجي باز مي كند a+b
    فايل از نوع باينري را به عنوان ورودي و خروجي باز ميكند ( اين
    فايل مي تواند قبلا" وجود داشته باشد ) .
    جدول مقادير معتبر mode در تابع ()fopen

    براي باز كردن فايل بايد يك اشاره گر از نوع فايل تعريف گردد تا به فايلي كه
    توسط تابع fopen باز مي شود اشاره نمايد . اگر فايل به دلايلي باز نشود اين
    اشاره گر برابر با NULL خواهد بود. بعنوان مثال ، دستورات زير را درنظر بگيريد: FILE *fp;( 1)
    fp=fopen("A:test"/"w");( 2)

    دستور (1)، متغير fp رااز نوع اشاره گر فايل تعريف مي كند و دستور (2) فايلي
    بنام test را بر روي درايو A ايجاد مي نمايد ( چون حالت "w" ، فايل را به صورت
    خروجي باز مي كند ) .
    براي تشخيص اين كه آيا فايل با موفقيت باز شده است يا خير مي توان اشاره گر
    فايل را با NULL مقايسه كرد. ( NULL ماكرويي است كه در فايل stdio.h تعريف شده
    است و با حروف بزرگ بكار مي رود ) . اگر اشاره گر فايل برابر با NULL باشد بدين
    معني است كه فايل باز نشده است :

    if((fp=fopen("A:test"/"w"))==NULL)
    {
    printf("cannot open file \ n");
    exit( 0

  5. #35
    آخر فروم باز Nesta's Avatar
    تاريخ عضويت
    Jan 2005
    محل سكونت
    tehran
    پست ها
    3,343

    پيش فرض

    پس از اين كه برنامه نويس كارش را با فايل تمام كرد ، بايد آن را ببندد .
    بستن فايل توسط تابع ()fclose انجام مي شود كه داراي الگوي زير است : int fclose(FILE *fp)

    در الگوي فوق ، fp به فايلي اشاره مي كند كه بايد توسط تابع ()fclose بسته
    شود . بعنوان مثال ، دستور ;(p)fclose موجب بستن فايلي ميشود كه p به آن اشاره
    مي كند .

  6. #36
    آخر فروم باز Nesta's Avatar
    تاريخ عضويت
    Jan 2005
    محل سكونت
    tehran
    پست ها
    3,343

    پيش فرض

    براي نوشتن يك كاراكتر در فايل ، از توابع ()putc و ()fputc استفاده ميشود.
    طريقه استفاده از اين دو تابع يكسان است . تابع ()putc در گونه هاي جديد C و
    ()fputc در گونه هاي قديمي C وجود داشته است . چون تابع ()putc به صورت ماكرو
    تعريف شده است سرعت عمل آن بالا است . لذا سعي ما در اين است كه از تابع ()putc
    استفاده شود . الگوي تابع ()putc بصورت زير است : int putc( int ch/FILE *fp)

    در الگوي فوق ، ch كاراكتري است كه بايد در فايل نوشته شود و fp اشاره گري
    از نوع فايل است كه مشخص مي كند، كاراكتر موردنظر بايد در چه فايلي نوشته شود.
    براي خواندن كاراكترها از فايل ، ميتوان از دو تابع ()getcو()fgetc) استفاده
    نمود . نحوه بكارگيري اين دو تابع يكسان است . تابع ()fgetc در گونه هاي قديمي C
    و ()getc در گونه هاي جديد C وجود دارد . چون تابع ()getc بصورت ماكرو پياده
    سازي شده است از سرعت بيشتري برخوردار است . لذا ما سعي در استفاده از تابع
    ()getc داريم . الگوي اين تابع بصورت زير است : int getc( FILE *fp)

    در الگوي فوق ، fp اشاره گري است كه مشخص مي كند كاراكتر مورد نظر از كدام
    فايل بايد خوانده شود .
    در مورد خواندن و نوشتن داده ها بر روي فايل بايد به نكاتي توجه داشت : 1
    وقتي كاراكترهايي بر روي فايل نوشته مي شوند بايد مكان بعدي كه ، كاراكتر
    آتي در آنجا قرار مي گيرد مشخص باشد . همچنين وقتي كه كاراكترهايي از فايل
    خوانده ميشوند بايد مشخص باشد كه تاكنون تا كجا فايل خوانده شده است و كاراكتر
    بعدي از كجا بايد خوانده شود . براي برآوردن اين هدف ، سيستم از يك متغير بنام "
    موقعيت سنج فايل " استفاده مي كند كه با هر دستور خواندن و يا نوشتن بر روي
    فايل ، مقدار اين متغير بطور اتوماتيك تغيير مي كند تا موقعيت فعلي فايل را
    مشخص نمايد . لذا عمل نوشتن بر روي فايل و عمل خواندن از روي آن از جايي شروع
    مي شود كه اين متغير نشان مي دهد . 2
    در هنگام خواندن داده ها از فايل بايد بتوان انتهاي فايل را تست نمود .
    يعني در برنامه بايد بتوان اين تست را انجام داد كه ، اگر در حين خواندن داده ها
    از فايل ، " موقعيت سنج فايل " به انتهاي فايل رسيد دستور خواندن بعدي صادر
    نگردد . چرا كه در غير اينصورت ، سيستم پيام خطايي را مبني بر نبودن اطلاعات در
    فايل صادر مي كند .
    در حين خواندن داده ها از فايل text پس از رسيدن به انتهاي فايل تابع ()getc
    يا ()fgetc علامت EOF را برمي گرداند. لذا در هنگام خواندن داده ها از فايل text
    مي توان به عمل خواندن ادامه داد . تا اين كه كاراكتر خوانده شده برابر با EOF
    گردد. درفايل باينري براي تست كردن انتهاي فايل ازتابع ()feof استفاده ميگردد.
    الگوي اين تابع بصورت زير است : int feof( FILE *fp)

    در الگوي فوق ، fp اشاره گري است كه مشخص مي كند اين تابع بايد بر روي چه
    فايلي عمل كند . تابع ()fopen علاوه بر تشخيص انتهاي فايلهاي باينري براي تشخيص
    انتهاي فايل هاي text نيز استفاده مي شود . اكنون به بررسي مثال هايي در مورد
    فايل هاي text و باينري و چگونگي تست انتهاي اين دو نوع فايل مي پردازيم .

    مثال 1: برنامه اي كه كاراكترهايي را از ورودي خوانده و در يك فايل text قرار
    مي دهد ( آخرين كاراكتر ورودي $ است ) و سپس داده هاي موجود در اين فايل را
    خوانده و به فايل ديگري منتقل مي كند .

    #include "stdio.h"
    #include "stdlib.h"

    void main(void)
    {
    FILE *in/*out ;
    char ch;
    in=fopen("test.dat"/"w");
    if( in==NULL)
    {
    printf("cannot open file\n");
    exit(1);
    }
    do {
    ch=getchar)(;
    putc(ch/in);
    }while(ch!='$');
    fclose(in);
    out=fopen("output.dat"/"w");
    if(out==NULL)
    {
    printf("cannot open out file");
    exit(1);
    }
    in=fopen("test.dat"/"r");
    if(in==NULL)
    {
    printf("cannot open input file");
    exit(1);
    }
    ch=getc(in);
    while(ch!=EOF)
    {
    putc(ch/out);
    ch=getc(in);
    }
    fclose(in);
    fclose(out);
    }


    نمونه اي از اجراي برنامه مثال 1 :

    this is a sample file.
    this is a text file.
    text file is slow.
    end of file.
    $



    مثال 2: برنامه اي كه كاراكترهايي رااز صفحه كليد گرفته و در يك فايل باينري
    قرار ميدهد و سپس كاراكترهاي موجود در اين فايل را خوانده و به يك فايل باينري
    ديگر منتقل مي كند . اسامي فايل هاي ورودي و خروجي بعنوان آرگومان تابع اصلي
    به برنامه وارد مي شوند .

    #include "stdio.h"
    #include "stdlib.h"

    void main(int argc/char *argv[])
    {
    FILE *in/*out ;
    char ch;
    clrscr )(;
    if(argc!=3)
    {
    printf("you forget enter");
    printf(" file name\n");
    exit(1);
    }
    in=fopen(argv[1]/"wb");
    if( in==NULL)
    {
    printf("cannt open(first)");
    printf(" output file \n");
    exit(1);
    }
    do {
    ch=getchar)(;
    putc(ch/in);
    } while(ch!='$');
    fclose(in);
    in=fopen(argv[1]/"rb");
    if(in==NULL)
    {
    printf("cannot open input");
    printf(" file");
    exit(1);
    }
    out=fopen(argv[2]/"wb);
    if(out==NULL)
    {
    printf("cannot open output");
    printf(" file");
    exit(1);
    }
    ch=getc(in);
    while(!feof(in))
    {
    putc(ch/out);
    ch=getc(in);
    }
    fclose(in);
    fclose(out);
    }



    مثال 3: برنامه اي كه برنامه ديگري را بعنوان فايل ورودي ، پذيرفته و تعداد
    پرانتزهاي باز و بسته و همچنين تعداد آكولادهاي باز و بسته را شمارش مي كند .
    نام فايل ورودي بعنوان آرگومان تابع اصلي ، به برنامه وارد مي شود .

    #include "stdio.h"
    #include "stdlib.h"

    void main(int argc/char *argv[])
    {
    FILE *in ;
    char ch;
    int openbraket=0 / closebraket=0;
    int openbraket=0 / closparant=0;
    if(argc!=2)
    {
    printf("\n the number of");
    printf(" argument is incorrect.");
    exit(0);
    }
    in=fopen(argv[1]/"r");

    if( in==NULL)
    {
    printf("\n file cannot open!.");
    exit(0);
    }
    ch=getchar)(;
    while( ch != EOF)
    {
    if( ch=='{')
    openbraket ++ ;
    else if( ch=='}')
    closebraket ++;
    else if( ch=='(')
    openparant ++;
    else if( ch==')')
    closparant ++;
    ch=getc(in );
    }
    printf("\n the number of open ");
    printf("braket is:%d"/openbraket);
    printf("\n the number of close ");
    printf("braket is:%d"/closebraket);
    printf("\n the number of open ");
    printf("parantheses is:");
    printf("%d"/openparant);
    printf("\n the number of close");
    printf(" parantheses is:");
    printf("%d"/closparant);
    fclose(in);
    }


    نمونه اي از خروجي برنامه مثال 3 :

    E:\TC>9-3 11.7.c

    the number of open braket is:37
    the number of close braket is:37
    the number of open parantheses is:177

  7. #37
    آخر فروم باز Nesta's Avatar
    تاريخ عضويت
    Jan 2005
    محل سكونت
    tehran
    پست ها
    3,343

    پيش فرض

    براي نوشتن رشته ها در فايل ، از تابع ()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
    كاراكتري كه انتهاي خط را مشخص مي كند جزئ رشته اي خواهد بود كه اين تابع از
    فايل مي خواند .

    مثال : برنامه اي كه رشته هايي رااز ورودي ( صفحه كليد ) خوانده و در يك فايل
    قرار مي دهد . از آنجايي كه تابع ()gets كاراكتري كه پايان خط را مشخص مي كند
    به رشته اضافه نمي كند ، در حين نوشتن بر روي فايل اين كاراكتر به رشته خوانده
    شده اضافه مي شود . براي خاتمه برنامه كافي است به جاي رشته ، فقط كليد enter
    وارد شود .

    #include "stdio.h"
    #include "stdlib.h"

    void main(void)
    {
    FILE *fp ;
    char str[80];
    if((fp=fopen("test"/"w"))==NULL)
    {
    printf("cannot open file\n" );
    exit(1);
    }
    printf("enter a string");
    printf("(ENTER to quit\n");
    while( 1)
    {
    gets(str);
    if(!str[0])
    break ;
    strcat(str/"\n");
    fputs(str/fp);
    }
    fclose(fp );
    }


    نمونه اي از اجراي برنامه مثال بالا :

    enter a string(ENTER to quit
    in the name of god.
    this is a sample file
    for string i/o.
    bottom of

  8. #38
    آخر فروم باز Nesta's Avatar
    تاريخ عضويت
    Jan 2005
    محل سكونت
    tehran
    پست ها
    3,343

    پيش فرض

    در مثالهايي كه تاكنون مطرح گرديد، فايل يا فقط بعنوان وسيله ورودي استفاده
    گرديد و يا فقط بعنوان وسيله خروجي ، در اين قسمت مشاهده خواهد شد كه چگونه
    ميتوان يك فايل را هم بعنوان وسيله ورودي و هم بعنوان وسيله خروجي مورداستفاده
    قرار داد. براي اين منظور كافي است در تابع ()fopen بجاي mode از يكي از عبارات r+
    يا r+tا ( باز كردن فايل text موجود بعنوان ورودي و خروجي ) ، w+يا w+tا
    ( ايجاد يك فايل text بعنوان ورودي و خروجي ) ، a+يا a+tا ( ايجاد فايل text و
    يا باز كردن فايل text موجود ، بعنوان ورودي و خروجي ) ، r+b ( باز كردن فايل
    باينري موجود ، بعنوان ورودي و خروجي ) ، w+b ( ايجاد يك فايل باينري بعنوان
    ورودي و خروجي ) و ياa+b ( ايجاد و يا بازكردن فايل موجود باينري بعنوان ورودي
    و خروجي ) استفاده نمود . بعنوان مثال ، دستورات زير را در نظر بگيريد :

    fp1= fopen( "test.dat"/ "w+b");( 1)
    fp2= fopen( "sample.dat"/ "r+b");( 2)
    fp3= fopen( "test2.dat"/"a+t");( 3)


    دستور (1) ، فايلي بنام test.dat را از نوع باينري و بصورت ورودي و خروجي
    باز مي كند كه اشاره گر fp1 به آن اشاره مي كند . اگر فايل test.dat قبلا" وجود
    داشته باشد محتويات قبلي آن از بين خواهند رفت .دستور(2)، فايلي بنام sample.dat
    را كه اكنون بر روي درايو جاري وجود دارد از نوع باينري و بصورت ورودي و خروجي
    باز مي كند . اگر فايل sample.dat بر روي درايو جاري وجود نداشته باشد ، پيام
    خطايي صادر خواهد شد . دستور (3) ، فايلي بنام test2.dat را از نوع text و به
    صورت ورودي و خروجي باز مي كند . اگر فايل test2.dat قبلا" وجود نداشته باشد
    ايجاد خواهد شد و اگر وجود داشته باشد اطلاعات قبلي آن محفوظ بوده و اطلاعات جديد
    به انتهاي آن اضافه خواهد شد .
    در حين كار با فايل ها ( نوشتن اطلاعات بر روي آنها و يا خواندن اطلاعات از
    آنها ) براي برگشت به ابتداي فايل ( تغيير " موقعيت سنج فايل " طوري كه ابتداي
    فايل اشاره كند ) بايد فايل را بسته و مجددا" آن را باز نمود ( البته با توجه
    به مطالبي كه تاكنون در مورد فايل ها گفته شد ) . اين مطلب در مثال هايي كه
    تاكنون مطرح شد به چشم مي خورد . اصولا" شايد در فايل هايي كه فقط بعنوان خروجي
    و يا فقط بعنوان ورودي باز مي شوند، نياز به برگشت به ابتداي فايل ( بدون بستن
    و باز كردن مجدد آن ) احساس نشود، ولي اين امر در مورد فايل هاي ورودي و خروجي
    به عنوان يك نياز مطرح است . براي اين منظور از تابعي بنام ()rewind استفاده
    مي گردد . الگوي تابع ()rewind در فايل stdio.h قرار داشته و بصورت زير است : void rewind( FILE *fp)

    در الگوي فوق ، fp به فايلي اشاره مي كند كه " موقعيت سنج " آن بايد به
    ابتداي فايل اشاره نمايد .

    مثال : برنامه اي كه رشته هايي را از ورودي خوانده و در يك فايل text قرار
    مي دهد و سپس محتويات اين فايل را خوانده و به صفحه نمايش منتقل مي كند .

    #include "stdio.h"
    #include "stdlib.h"

    void main(void)
    {
    FILE *fp ;
    char str(80);
    if((fp=fopen("test"/"w+"))==NULL)
    {
    printf("cannot open file\n" );
    exit(1);
    }
    printf("enter a string");
    printf("(Enter to quit\n");
    while( 1)
    {
    gets(str);
    if(!str[0])
    break ;
    strcat(str/"\n");
    fputs(str/fp);
    }
    printf("\n the content of");
    printf(" file is:\n\n");
    rewind(fp);
    fgets(str / 79 / fp);
    while( !feof(fp))
    {
    printf("%s"/str);
    fgets(str / 79 /fp );
    }
    fclose(fp );
    }


    نمونه اي از خروجي برنامه بالا :


    ( متن وارد شدهه از طريق صفحه كليد به فايل text ) enter a string(Enter to quit
    << top of file >>
    this is an example for
    read/write file.
    <>

    ( متن موجود در فايل text كه به خروجي منتقل شده است ) the aontent of file is:

    << top of file >>
    this is an example for
    read/wri

  9. #39
    آخر فروم باز Nesta's Avatar
    تاريخ عضويت
    Jan 2005
    محل سكونت
    tehran
    پست ها
    3,343

    پيش فرض

    در حين انجام كار با فايل ها ممكن است خطايي رخ دهد . بعنوان مثال ، عدم
    وجود فضاي كافي براي ايجاد فايل ، آماده نبودن دستگاهي كه فايل بايد در آنجا
    تشكيل گردد و يا مواردي از اين قبيل منجر به بروز خطا مي شوند . با استفاده از
    تابع ()ferror مي توان از بروز چنين خطايي مطلع گرديد . الگوي تابع ()ferror
    در فايل stdio.h قرار داشته و بصورت زير است : int ferror( FILE *fp)

    در الگوي فوق ، fp اشاره گري است كه مشخص مي كند اين تابع بايد بر روي چه
    فايلي عمل كند. اين تابع يك تابع منطقي است . بدين معني كه اگر خطايي در رابطه
    با فايل ها رخ داده باشد اين تابع ارزش " درستي " وگرنه ارزش " نادرستي " را
    برمي گرداند . براي تشخيص خطا در كار با فايل ها ، بلافاصله پس از هر فعلي كه
    روي فايل انجام مي شود بايد از اين تابع استفاده نمود .

    مثال : برنامه اي كه كاراكترهاي tab را از فايل حذف كرده و بجاي آن به تعداد
    كافي فضاي خالي (blank) قرار مي دهد . اسامي فايل هاي ورودي و خروجي از طريق
    آرگومان به برنامه وارد مي شود .

    #include "stdio.h"
    #include "stdlib.h"

    #define TAB_SIZE 8
    #define OUT 1
    #define IN 1
    void err(int );
    void main(int argc / char *argv[])
    {
    FILE *in / *out;
    int tab / i ;
    char ch ;
    if(argc!=3)
    {
    printf("\n incorrect number of");
    printf(" parameters" );
    printf("\n\t press a key... " );
    getch )(;
    exit(1 );
    }
    in=fopen(argv[2] / "wb" );
    if( in==NULL)
    {
    printf("\n cannot open");
    printf(" output file." );
    printf("\n\t press a key... " );
    getch )(;
    exit(1 );
    }
    tab=0;
    do {
    ch=getc(in );
    if( ferror(in))
    err(IN );
    if(ch=='\t')
    {
    for( i=tab ; i < 8 ; i++)
    {
    putc(' ' / out );
    if( ferror(out))
    err(OUT );
    }
    tab=0 ;
    }
    else
    {
    putc(ch / out );
    if( ferror(out))
    err(OUT );
    tab ++ ;
    if( tab==TAB_SIZE ||
    ch=='\n' || ch=='\r')
    tab=0;
    }
    }while( !feof(in ));
    fclose(in );
    fclose(out );
    }
    void err(int eror)
    {
    if( eror==IN)
    printf("\n error on input file.");
    else
    printf("\n press a key... ");
    getch )(;
    exit

  10. #40
    آخر فروم باز Nesta's Avatar
    تاريخ عضويت
    Jan 2005
    محل سكونت
    tehran
    پست ها
    3,343

    پيش فرض

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

    در الگوي فوق filename بنام فايلي كه بايد حذف شود ، اشاره مي كند. اگر عمل
    تابع ناموفقيت انجام شود مقدار صفر وگرنه مقداري غير از صفر برگردانده خواهد
    شد .

    مثال : برنامه اي كه نام فايلي را بعنوان آرگومان پذيرفته و آنرا حذف ميكند.

    #include "stdio.h"
    #include "stdlib.h"

    main(int argc / char *argv[])
    {
    char str[80] ;
    if(argc!=2)
    {
    printf("\n you must type a file name!\n" );
    exit(1 );
    }
    printf("erase %s( y/n"/argv[1]);
    gets(str );
    if(toupper(*str)=='y')
    if(remove(argv[1]))
    {
    printf("cannot erase file\n");
    exit(1);
    }
    }


    نمونه اي از اجراي برنامه مثال بالا :

    E:\TC>9-6 test.x
    erase test.x(y/ny

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •