مشاهده نسخه کامل
: مشکلی در باز کردن فایل در ویژوال سی :
cpplover
14-01-2008, 20:36
در ویژوال 2005 هروقت از CFile استفاده می کنم با یک خطا مواجه میشم ممکنه لطفا راهنمایی بدید؟
مثلا فرض کنید من کد زیر رو در تابع مربوط به یک دکمه نوشتم :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
در خطی که Bold شده خطای زیر ایجاد میشه :
error C2664: 'CFile::Open' : cannot convert parameter 1 from 'const char [10]' to 'LPCTSTR'
این کدها در ویژوال 6 به راحتی جواب می داد اما باز هم باید با مشکلات ویژوال جدید دست و پنجه نرم کنم!
با تشکر
در کد باید از T_ استفاده کنین :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
cpplover
15-01-2008, 12:51
خیلی عالی بود من رو از این مشکل هم مثل همیشه نجات دادید!!! :11:
دو تا سوال دیگه هم دارم :
اول اینکه می خوام بدونم وقتی که در فایل دارم چیزی می نویسم چطور می تونم به مکان نما دستور بدم که به خط بعد بره ؟
چون من مجبورم اطلاعاتی رو از یک edit text وارد یک فایل کنم اما میخوام هر چیزی که می نویسم وارد یک خط جداگانه از فایل بشه .
دستور SeekToEnd هم فکر نکنم بتونم کمکی کنه
و دوم اینکه چطور میشه از فایل اطلاعات رو به صورت خطی خوند ؟مثلا اگه من بخوام کل خط سی ام فایلی رو بخونم باید چکار کنم ؟
از شما مثل همیشه تشکر می کنم
برای اینکه به خط بعد برین کافیه r\n\ رو در Buffer مربوطه بنویسین.
مثلا به این شکل :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
بنابراین کافیه بعد از هر ورود رشته اون رو با r\n\ جمع کنین.
برای دستیابی به خط مورد نظر هم کافیه تعداد r\n\ رو در فایل مورد نظر بگیردین.
cpplover
17-01-2008, 23:23
با سلام :
دوست من ببینید کاری که کردید در مورد این برنامه دقیقا درسته اما در مورد کد من عمل نمیکنه :
من یک دکمه و یک edit text دارم حالا من میخوام با یک بار فشردن دکمه متن داخل edit به خط اول فایل منتقل بشه و مثلا اگه من 10 بار دکمه رو فشردم (فرض کنید edit خالی باشه) 10 خط مکان نما در فایل پایین بره (حالا فرض کنید در edit چیزی بنویسیم ) و حالا در با فشردن دکمه در خط یازدهم ، رشته موجود در edit نوشته بشه . من کد شما رو به این صورت نوشتم :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
مد create رو به خاطر حذف نشدن اطلاعات فایل اولیه پاک کردم و فایل رو دستی ایجاد کردم .m همان string مربوط به edit می باشد این خط ها رو در تابع دکمه گذاشتم
با تشکر
دوباره سلام!
برنامه چند تا اشکال داشت :
1- شما در هر بار استفاده از این کد ، فایل text رو دوباره رو نویسی میکنین.
یکی از راه حل ها اینکه که file رو به صورت private تعریف کنین و از Open در OnInitDialog استفاده کنین:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
و در تابع OnInitDialog
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اشکال دیگه این بود که شما نباید مستقیم r\n\ رو به ar بفرستین.
به همین دلیل من از CString استفاده کردم. همین طور میتونین از typecast استفاده کنین
که در کد زیر استفاده شده.
در Event کلیک یک Button هم کد زیر رو قرار بدین :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
و در آخر قبل از بسته شدن فرم file رو ببندین. (WM_CLOSE)
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
موفق باشین.
cpplover
18-01-2008, 20:11
متشکر از جواب شما :
روش جالبی بود فقط میخوام بدونم تعداد خطوط در یک فایل رو چطور میشه تشخیص داد؟
چون من مجبورم اطلاعاتی رو که در فایل می نویسم خط به خط وارد listbox کنم به همین خاطر میخوام در یک حلقه for اطلاعات رو خط به خط از فایل بخونم اما خوب مسلما باید بدونم چند خط دارم تا اینکه به همون تعداد بار عمل خوندن رو تکرار کنم .
اما یه چیز دیگه : در نرم افزارهای مختلف مثلا یه cheek box ممکنه واسه یک دیالوگ وجود داشته باشه با این عنوان : don’t show this message again میخواستم بدونم در این حالت اطلاعات در فایل ذخیره میشه یا نه ؟
یعنی زمانی که ما اون رو تیک میزنیم اطلاعات در فایل ذخیره میشه ؟
با تشکر
میتونین از کد زیر استفاده کنین :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
فکر نمیکنم نیاز به توضیحی داشته باشه. فقط من از CArchive استفاده نکردم.
اما در مورد سوال دومتون:
بله ، میشه به این روش هم عمل کرد. اما زیاد توصیه نمی کنم.
بهترین روش برای اینکار ذخیره این اطلاعات در یک Registry Key هست که قبلا M3rz4d عزیز در مورد
اون توضیح دادن.
cpplover
20-01-2008, 19:33
فکر نمیکنم نیاز به توضیحی داشته باشه
البته من فکر می کنم باشه !!!
someone عزیز واقعیتش اینه که حکایت من ویادگیری visual دقیقا مثل کسیه که توی یک شهر بزرگ گم شده باشه !!
هر چند من با مطالعه و کمک شما خیلی چیزا رو تجربه میکنم اما هر روز به چیزهایی برخورد می کنم که اصلا واسم آشنا نیستند و گاهی اوقات احساس می کنم از msdn هم نمی تونم استفاده کنم.
مثلا از خطوطی که در بالا آوردید من درفهم و یادگیری کدها دچار اشکال شدم
WCHAR Buffer[ 2048 ];
::ZeroMemory(Buffer , sizeof(Buffer));
مثلا در مورد zeromemory در msdn اینطوری اومده بود:
The ZeroMemory macro fills a block of memory with zeros.
میشه بگید پر شدن بلوک های حافظه با صفر چه ربطی به اینجا داره و اصلا علامت :: اول اون چه چیزی رو میرسونه ؟ و میشه راهنمایی بدید چطور میشه ویژوال رو به بهترین شکل (مثل شما ) یاد گرفت ؟
ممنون میشم منو راهنمایی بدید
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.