PDA

View Full Version : سوال: سوال در مورد فایل ها



...StacK...
پنج شنبه 08 مرداد 1388, 00:28 صبح
سلام.

به کد زیر نگاه کنید؟؟؟
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
int main()
{
FILE *in,*out;
char ch;
clrscr();
in=fopen("test.dat","w");
if(!in){
printf("cannot open file\n");
getch();
exit(1);
}
printf("\n enter characters($ for end):");
do{
ch=getchar();
putc(ch,in);
}while(ch!='$');
fclose(in);
out=fopen("output.dat","w");
if(!out){
printf("cannot open out file");
getch();
exit(1);
}
in=fopen("test.dat","r");
if(!in){
printf("can not open input file");
getch();
exit(1);
}
ch=getc(in);
while(ch!=EOF){
putc(ch,out);
ch=getc(in);
}//end of while
fclose(in);
fclose(out);
printf("\n file test.dat transfered to output.dat.");
getch();
return 0;
}

وقتی برنامه رو اجرا میکنیم یه فایل به نام test.dat ساخته میشه

و تقاضای یه رشته برای نوشتن روی فایل میکنه ,که من رشته barnamenevis.org رو دادم

و enter رو زدم,حالا فایل test.dat رو با ادیتور باز کردم ولی هیچی توش نوشته نشده بود

با توجه به این قطعه کد:
do{
ch=getchar();
putc(ch,in);
}while(ch!='$');

وقتی که ما رشته رو وارد کردیم و enter رو زدیم کل رشته از بافر باید بر روی فایل نوشته بشه

پس چرا نوشته نشده بود؟؟؟ ایا حتما باید فایل بسته شه تا داده ها رو فایل نوشته بشه؟؟؟

در این صورت حجمی که بافر میتونه داده ها رو در خودش ذخیره کنه چند بایته؟؟؟

یعنی مثلا چند هزار کاراکتر رو از ورودی میدیم .....بافر سر ریز نمیشه؟؟؟

ایا تابع یا راهی وجود داره که مقدار موجود در بافر را کنترل کنیم و اگر به حدی معینی رسید

به کاربر اخطار لازم رو بدیم؟؟؟

tdkhakpur
پنج شنبه 08 مرداد 1388, 12:29 عصر
سلام
مرحله به مرحله به جلو بروید. کد زیر را اصلاح کنید.


out=fopen("output.dat","w"); به out=fopen("output.dat","rb+");

...StacK...
پنج شنبه 08 مرداد 1388, 23:54 عصر
سلام
مرحله به مرحله به جلو بروید. کد زیر را اصلاح کنید.


out=fopen("output.dat","w"); به out=fopen("output.dat","rb+");


ببخشید...ولی چه ربطی داشت؟ شما میگید من فایل خروجی رو به صورت باینری

و به عنوان ورودی و خروجی باز کنم ,اونم در صورتی که از قبل این فایل موجود باشه.!!!

ولی هدف برنامه در این قسمت اینه که در هر صورت یه فایل به عنوان خروجی باز کنه

اگر وجود داشت overwrite بشه ,اگر وجود نداشت که ایجاد بشه.

در ضمن این خط هیچ ربطی به سوالات من و مواردی که در برنامه لحاظ کردم نداشت.

tdkhakpur
جمعه 09 مرداد 1388, 10:24 صبح
ببخشید...ولی چه ربطی داشت؟ شما میگید من فایل خروجی رو به صورت باینری
و به عنوان ورودی و خروجی باز کنم ,اونم در صورتی که از قبل این فایل موجود باشه.!!!
در ضمن این خط هیچ ربطی به سوالات من و مواردی که در برنامه لحاظ کردم نداشت.

سلام
به اصلاح شده برنامه تان نگاه کنید ببینید چقدر خودتان ایراد داشتید و ایرادتان را با مطالعه اصلاح کنید


#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
int main()
{
FILE *in,*out;
char ch;
clrscr();
in=fopen("test.dat","wb");
if(!in){
printf("cannot open file\n");
getch();
exit(1);
}
printf("\n enter characters($ for end):");
ch=getchar();
while(ch!='$')
{
putc(ch,in);
ch=getchar();
}
fclose(in);
out=fopen("output.dat","wb");
if(!out){
printf("cannot open out file");
getch();
exit(1);
}
in=fopen("test.dat","rb");
if(!in){
printf("can not open input file");
getch();
exit(1);
}
ch=getc(in);
while(!feof(in)){//ch!=EOF){
putc(ch,out);
ch=getc(in);
}//end of while
fclose(in);
fclose(out);
printf("\n file test.dat transfered to output.dat.");
getch();
return 0;
}

...StacK...
جمعه 09 مرداد 1388, 21:46 عصر
سلام
به اصلاح شده برنامه تان نگاه کنید ببینید چقدر خودتان ایراد داشتید و ایرادتان را با مطالعه اصلاح کنید


#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
int main()
{
FILE *in,*out;
char ch;
clrscr();
in=fopen("test.dat","wb");
if(!in){
printf("cannot open file\n");
getch();
exit(1);
}
printf("\n enter characters($ for end):");
ch=getchar();
while(ch!='$')
{
putc(ch,in);
ch=getchar();
}
fclose(in);
out=fopen("output.dat","wb");
if(!out){
printf("cannot open out file");
getch();
exit(1);
}
in=fopen("test.dat","rb");
if(!in){
printf("can not open input file");
getch();
exit(1);
}
ch=getc(in);
while(!feof(in)){//ch!=EOF){
putc(ch,out);
ch=getc(in);
}//end of while
fclose(in);
fclose(out);
printf("\n file test.dat transfered to output.dat.");
getch();
return 0;
}


اخه برادر من شما اومدی توضیح میدی که کاراکتر خونده شده مخالف با EOF بود...

ولی کد اصلی میگه اگه خروجی تابع feof نقیض شده بود (یعنی اگه به انتهای فایل نرسیده بود)

بازم میگم من هیچ مشکلی با مورادی که شما عرض کردید ندارم ...

کد و هدفی که دنبال میکنه و سوالاتم همه دارن داد میزنن....

من که درخواست اصلاح کد رو ندادم

بازم ممنون که زحمت کشیدی ,پاسخ دادی

tdkhakpur
جمعه 09 مرداد 1388, 23:24 عصر
اخه برادر من شما اومدی توضیح میدی که کاراکتر خونده شده مخالف با EOF بود...
ولی کد اصلی میگه اگه خروجی تابع feof نقیض شده بود (یعنی اگه به انتهای فایل نرسیده بود)
بازم میگم من هیچ مشکلی با مورادی که شما عرض کردید ندارم ...
کد و هدفی که دنبال میکنه و سوالاتم همه دارن داد میزنن....
من که درخواست اصلاح کد رو ندادم
عجب دورو زمانه ای شده بیا و خوبی کن.:متفکر:

...StacK...
شنبه 10 مرداد 1388, 02:36 صبح
خیلی اقایی.ما مخلصتیم.