ورود

View Full Version : سوال: مشكل با عضو GetFolderPath



Jenab4372
یک شنبه 05 مهر 1388, 10:36 صبح
سلام
در يك پروژه MFC بوسيله دستور زير يك ديالوگ open file باز مي كنم و مي خواهم مسير فولدري كه فايل در آن قرار گرفته را بخوانم ولي هنگام اجراي برنامه وقتي به عضو كلاسي كه مسير را برمي گرداند(GetFolderPath) مي رسد ارور داده و از آن خارج مي شود.
در حالي كه اعضاي مثل GetPathName و GetFileName و GetFileTitle بدون هيچ مشگلي جواب مي دهند.


CFileDialog dlgFile(TRUE);
if(dlgFile.DoModal() == IDOK)
{
m_strPicturePath = dlgFile.GetFolderPath();
UpdateData(FALSE);
}

Nima_NF
یک شنبه 05 مهر 1388, 13:04 عصر
در MSDN این طور نوشته شده است:




The dialog box must have been created with the OFN_EXPLORER style; otherwise, the method will fail with an assertion
.
You can call this method only while the dialog box is being displayed. After the dialog box has been closed, this function will no longer work, and the method will fail with an assertion.




یعنی:
1- دیالوگ باید فلگ OFN_EXPLORER را داشته باشد
2- دیالوگ باید همچنان باز باشد، در حالی که شما پس از DOModal دیالوگ را بسته اید.

Jenab4372
یک شنبه 05 مهر 1388, 17:47 عصر
در MSDN این طور نوشته شده است:



یعنی:



1- دیالوگ باید فلگ OFN_EXPLORER را داشته باشد


2- دیالوگ باید همچنان باز باشد، در حالی که شما پس از DOModal دیالوگ را بسته اید.




خوب من از خير اين گذشتم ولي حالا ميشه چند تا تابع كار با رشته خوب به من معرفي كنيد تا اسم و پسوند فايل رو از آخر مسير حذف كنم تا به همين هدف برسم
ممنون

Nima_NF
یک شنبه 05 مهر 1388, 19:41 عصر
شما حتی اگر هیچ تابعی برای این کار نشناسید خیلی راحت می توانید تک تک کارکتر ها را در یک حلقه for معمولی از انتها بررسی کنید تا به / برسید و سپس از اول تا آن قسمت می شود رشته فولدر شما. (strncpy برای کپی تعداد کارکتر مشخص، یک تابع استاندارد)

حقیقتا نمی دانم چرا هر چند روز چنین سوالی پرسیده می شود، الگوریتم فوق کار سختی نیست...


در هر حال این راه کوتاه و از طریق توابع هست:



CString str = _T("c:\\myfolder\\app.exe");
int endPos = str.ReverseFind(_T('\\'));

CString strFolder = str.Left(endPos);