ورود

نسخه کامل مشاهده نسخه کامل : کار با فایل ها در C++



Ho$∑∫N
24-08-2008, 07:17
دوستان من می خوام در c++ با فایل ها کار کنم. می خوام برنامه ای بنویسم که بتونه داده هایی رو به صورت یک فایل متنی دریافت کنه و یا داده هایی رو به صورت فایل متنی ذخیره بکنه. من فقط میدونم که باید از fstream استفاده کنم ولی با توابع این کتابخانه آشنایی ندارم اگه میشه لیست از توضیحات و طریقه ی استفاده این توابع ارائه کنید خیلی ممنون میشم.

sin66x
24-08-2008, 09:28
برای کار با فایلها باید اول یه اشاره گر به فایل تعریف کنی که به خونه های دیسک (مثلا هارد) دسترسی داشته باشی
برای این کار بنویس

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
حالا fp یک اشاره گر به فایله. باید مقدار دهی شه
برای این کار باید یک فایل رو باز کنی (چه برای خواندن چه برای نوشتن) مثلا اینجا فایل C:\Text.txt رو برای نوشتن/خواندن باز می کنیم:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
خوب الان فایل درست شده و آمادست که توش بنویسیم.
برای نوشتن از توابع زیر:

fputc,fprintf,fwrite
استفاده کنید و برای خواندن اطلاعات از:

fgetc,fscanf,fread
برای دانستن الگوی فایلها از help خود سی پلاس استفاده کنید اگر کمکتون نکرد که در مورد تابع ها هم توضیح بدم.
اما کلا fprintf خیلی شبیه fprint خودمونه با این تفاوت که آرگومان اولش باید یه اشاره گر به فایل (کلا استریم، میتونه به پورت LPT و ... هم اشاره کنه) باشه.
مثلا:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

نکته مهم اینه که fopen ممکنه نتونه فایل رو باز کنه اونوقت fp که مقدار نامعلومی داره ممکنه به هار یا سایر سخت افزارات آسیب برسونه پس قبل از شروع کار چک کن که آیا fopen آدرس یک فایل رو برگردونده یا مقدار NULL (که در صورت باز نکردن فایل برمیگردونه) این کار اینجوری انجام میشه:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
باز هم اگه سوالی بود در خدمتیم اما توی همه کتابهای C این مسئله هست. بهتره خودتون بخونین و با همه جنبه های کار با فایل آشنا بشید.

Ho$∑∫N
24-08-2008, 11:44
من کتاب دیتل رو می خونم چاپ ناقوس ولی این آموزش توش نبود. اما در هر حال شما آموزش رو کامل به من دادید خیلی ممنون!

hoax3r
24-08-2008, 13:59
در مورد C جناب sin66x کامل توضیح دادن

و در مورد ++C این سایت رو میتونین ببینین


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

شاد باشید

Ho$∑∫N
25-08-2008, 07:22
من جزوه ی جناب hoax3r رو مطالعه کردم ولی وقتی خواستم برنامه بنویسم کامپایلر ارور داد. من برای نام فایل از یک متغییر string استفاده کردم ولی وقتی خواستم با تابع open فایل رو بسازم و متغییرم رو به عنوان آرگومان به تابع ارسال کردم کامپایلر ارور داد بعد تصمیم گرفتم با استفاده از تعریف یک آرایه رشته ای این کار رو انجام بدم و به جای تابع getline از cin استفاده کنم که اینکار جواب داد. بعد کدی نوشتم که از کاربر درخواست کنه متنی رو به عنوان محتوای فایل دریافت کنه برای همین از یک متغییر string استفاده کردم و بعد از اون تابع getline رو به منظور ورود اطلاعات به متغییرم تعریف کردم و در آخر دستورات ایجاد فایل رو نوشتم و بعد getch() و سپس مقدار بازگشتی main و تمام. اما وقتی که برای وارد کردن نام فایل از آرایه استفاده کردم زمانی که می خواستم محتوای فایلم رو وارد کنم با فشردن اولین کلید از برنامه خارج می شد وقتی تابع getch() رو پاک کردم برنامه بلافاصله بعد از وارد کردن نام فایل بسته می شد و فقط یک فایل با محتوای خالی و حجم 0 کیلوبایت ایجاد می شد. چگونه می تونم این مشکل رو حل کنم؟

کدی که نوشتم :



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

hoax3r
25-08-2008, 09:25
من جزوه ی جناب hoax3r رو مطالعه کردم ولی وقتی خواستم برنامه بنویسم کامپایلر ارور داد. من برای نام فایل از یک متغییر string استفاده کردم ولی وقتی خواستم با تابع open فایل رو بسازم و متغییرم رو به عنوان آرگومان به تابع ارسال کردم کامپایلر ارور داد بعد تصمیم گرفتم با استفاده از تعریف یک آرایه رشته ای این کار رو انجام بدم و به جای تابع getline از cin استفاده کنم که اینکار جواب داد. بعد کدی نوشتم که از کاربر درخواست کنه متنی رو به عنوان محتوای فایل دریافت کنه برای همین از یک متغییر string استفاده کردم و بعد از اون تابع getline رو به منظور ورود اطلاعات به متغییرم تعریف کردم و در آخر دستورات ایجاد فایل رو نوشتم و بعد getch() و سپس مقدار بازگشتی main و تمام. اما وقتی که برای وارد کردن نام فایل از آرایه استفاده کردم زمانی که می خواستم محتوای فایلم رو وارد کنم با فشردن اولین کلید از برنامه خارج می شد وقتی تابع getch() رو پاک کردم برنامه بلافاصله بعد از وارد کردن نام فایل بسته می شد و فقط یک فایل با محتوای خالی و حجم 0 کیلوبایت ایجاد می شد. چگونه می تونم این مشکل رو حل کنم؟

کدی که نوشتم :



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


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

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

شاد باشید

Ho$∑∫N
25-08-2008, 09:28
حالا کاربرد این دستور چیه؟

hoax3r
25-08-2008, 14:09
نمیدونم:31: ، فقط میدونم تو این حالت کار آدمو راه میندازه:20:

sin66x
25-08-2008, 18:24
سلام آره حق با شماست من برای C گفتم، چون توی توربو کد می نویسم زیاد قرو قاطی کد میزنم از هر دوشون استفاده می کنم :))
اما در مورد sync:
این تابع گنجایش بافر درونی استریم رو با محل حافظش تنظیم میکنه. اینجا این تابع از صف استاندارد کاراکترها، کاراکتری رو که خونده نشده باشه پاک میکنه! اما نمی دونم چرا بدون این دستور نباید جواب بگیریم!

Ho$∑∫N
26-08-2008, 07:26
همین چیزاست که آدم به برنامه نویسی میل نشون میده چون خیلی پر پیچ خمه به نظر من :

برنامه نویسی دنیایی پر از ترفند هاست !

Ho$∑∫N
26-08-2008, 07:44
من تصمیم گرفتم پس از یادگیری کار با فایل ها یه برنامه درفترچه تلفن اساسی بنویسم :8: .چون همونطور که می دونید چندتا برنامه دفترچه تلفن توی انجمن بود که دوستان نوشته بودند وقتی اطلاعات جدیدی رو وارد می کردی ذخیره می کرد ولی فقط تا زمان اجرای برنامه وقتی از برنامه خارج می شدی و دوباره وارد می شدی اطلاعات از دست می رفت حالا من می خوام این برنامه رو با قابلیت ذخیره ی دائم بر روی هارد دیسک بنویسم و الان هم کمی از برنامه رو نوشتم (قسمت ذخیره برنامه رو) در ضمن برای صفحه ی اصلی و اولیه برنامه نتونستم از gotoxy استفاده کنم مجبور شدم از space استفاده کنم به صورت آماتوری :31: . حالا شما ببینید برنامه تا الان چطوریه قسمت about برنامه رو هم هنوز تابعش رو ننوشتم برای همین تو case 3 هیچ دستوری رو برای فراخوانی تابعم صادر نگردم |توجه اگه کمی به کد برنامه دقت کنید متوجه عملکرد جالبش میشید! البته قسمت ذخیره هم جای کار داره که در آینده اون رو هم تغییر می دم|کد برنامه :



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

Ho$∑∫N
27-08-2008, 06:44
دوستان عزیز برنامه کامل شد برای کمک به من در امر خطایابی این برنامه به تاپیکی که می زنم مراجعه کنید توی انجمن c.

gigamax
27-08-2008, 13:40
جالبه . من خیلی دنبال این کار می گشتم . مرسی دوست من .:20::31:
راستی مشکلت با gotoxy چیه؟
اگر از .net استفاده میکنی ، gotoxy نداره و باید تابعشو بنویسی
اینم تابعش . امیدوارم به دردت بخوره


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

Ho$∑∫N
29-08-2008, 07:01
خیلی ممنون مشکل منو حل کردید. سپاسگزارم

z_V_66
13-12-2008, 14:05
سلام
من باید دفترچه تلفن را به زبان سی پلاس پلاس بنویسم ، اما این زبان را در حد اشاره گرها میدونم ، دو کتاب دایتل اند دایتل وجعفرنژاد قمی گرفتم ولی نمیدونم کدوم قسمتش را برای نوشتن این برنامه بخونم ؟ لطفا اگر ممکنه منو سریعتر راهنمایی کنید وقت خیلی کم دارم برای این برنامه !