130 likes | 277 Views
درس برنامه سازي کامپيوتر. کار با فايل ها در زبان برنامه سازي C++. ساختار ديسکها. نحوة معرفي فايل در زبان c. معرفي متغير اشاره گر به ساختمان ( struct ) فايل ساختمان فايل : مجموعة اطلاعات مرتبط با فايل مشخص شده را نگه مي دارد نام فايل : شامل path نحوة باز شدن
E N D
درس برنامهسازي کامپيوتر کار با فايلها در زبان برنامهسازي C++
نحوة معرفي فايل در زبان c • معرفي متغير اشارهگر به ساختمان (struct) فايل • ساختمان فايل : مجموعة اطلاعات مرتبط با فايل مشخص شده را نگه ميدارد • نام فايل : شامل path • نحوة باز شدن • اشارهگر به موقعيت فعلي قابل خوانده/نوشته شدن فايل • ابعاد و اشارهگر به بافرها • ... • مربوط به کتابخانة stdio.h است
نحوة دسترسي به فايل • بازکردن فايل • fopen(“abc.efg”,”w”); • ورودي به تابع : دو اشارهگر به دو رشته هستند • رشتة اول نام فايل را مشخص ميکند • رشتة دوم نحوة باز شدن را تعيين مينمايد • تابع، آدرسي را برميگرداند که اگر NULL نباشد، عمل باز کردن فايل موفقيتآميز بوده است • دسترسي به فايل، از اين پس، از طريق اين اشارهگر خواهد بود
نحوة بازشدن فايل • براي هر فايل بازشده، اشارهگري به محلي که دسترسي بعدي از آن نقطه صورت ميگيرد در نظر گرفته ميشود • فايل بازشده ميتواند براي خوانده/نوشته شدن باز شود • اين موضوع بر رفتار در صورت موجود نبودن فايل مشخص شده تأثير ميگذارد
نوع فايل • در انتهاي متغير روش باز کردن در تابع fopen ، نوع رفتار بر اساس محتويات فايل ميتواند آورده شود • b معرف فايل باينري است : rb ، a+b ، wb+ • t معرف فايل متن text است. در اين صورت کد EOF معرف انتهاي فايل است : rt، a+t، wt+ • برخي ازکدهاي ديگر متن نيز ممکن است تفسير و مورد استفاده واقع شوند • انتهاي فايل از طريق مقدار حجم فايل نيز ميتواند تشخيص داده شود (در حالت باينري)
مثال • FILE *fptr1, *fptr2; • fptr1=fopen(“myfile.dat”,”r”); • if (!(fptr2=fopen(“mnq.xyz”,”w+”))){ • printf(“can not open file”); • printf(“program terminated”); • return(1); • } • for(inti=0; i<10; i++){…
بستن فايل / تخلية بافر • fclose(fptr1); • fcloseall(); • ممکن است نياز باشد آخرين تغييرات اعمال شده در فايل، که ممکن است تنها در بافر اعمال شده باشد، در فايل اصلي نيز اعمال شود • fflush (fptr1); • flushall();
فايلهاي باز موجود در کامپيوتر بصورت پيشفرض • هنگام روشن شدن هر کامپيوتري، تعدادي فايل بصورت پيشفرض باز ميشوند که عبارتند از • stdin • stdout • stderr • stdprn • stdaux
انتقال داده به/از فايل • به نوع اطلاعاتي که در فايل ذخيره ميشود ربط دارد • در برخط از فايلها ساختار اطلاعات متني است • حتي ممکن است اطلاعات عددي/مقادير به صورت متني ذخيره شوند • formatted output • در ساير فايلها اطلاعات در قالب اصلي متغيرها ذخيره شوند • ممکن است ساختار اطلاعات بصورت ترکيبي باشد • در اين صورت بايد موقعيت هر نوع داده در فايل طي قراردادي مشخص شود
ورود و خروج فرمتدار • کلية توابع فرمتدار قبلي براي تبادل داده با فايل وجود دارند • اين توابع به کدهاي فايل (مانند EOF) حساس هستند • توابع خروجي در انتهاط فايل EOF مينويسند • توابع ورودي، در صورت رسيدن به انتهاي فايل، NULL برميگردانند • fprintf, fscanf, fgets, fputs, fgetc, fputc • while(!feof) fputs(fgetc(fptr3)+4, fptr1); • b=fgets(a, 45, fptr2); • fprintf(fptr1, “%4d”, k); • fscanf(fptr2, “%d”, &k);
توابع مختلف • feof(fptr1) انتهاي فايل فرمتدار را پيدا ميکند • تست ميکند در موقعيت فعلي EOF قرار دارد يا نه • rewind(fptr1)اشارهگر به محل دسترسي را به ابتداي فايل ميبرد • ferror(fptr1) مشخص ميکند آخرين عمل انجام شده روي تابع داده شده موفقيتآميز بوده است يا نه • (نام فايل) removeفايل را حذف (delete) ميکند
ذخيره/خواندن مقادير در قالب اصلي متغيرها • fread(buffer1, 4, 250, fptr1); • fwrite(buffer2, 2, 112, fptr2); • fread(buffer1, sizeof(mystruct), 1120, fptr3); • fseek(fptr1, 12, SEEK_CUR); • //SEEK_END, SEEK_SET