الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكله فى الدالة Getopenfilename

بدأه Neo_2010 في 23 مارس 2008 · 1 رد · 601 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم و رحمة الله و بركاتة

حاولت مرارا و تكرارا ان احل هذة المشكله الفظيعة ...عندما اعطى المستخدم حرية اختيار أكثر من ملف ..اين يتم تخزين هذة الملفات ..

هل فى مصفوفة...لا أعلم

قرات فىMSDN ان الملفات المختارة يتم تخزينها فى العضو lpstrFile و يوجد مسافه بين كل ملف بس المشكلة هى كيفيه الوصول لمسارات هذة الملفات و التعامل معة

VOID GetOpenFilePath(TCHAR* Out,HWND hWnd,HINSTANCE hInst)
{
	OPENFILENAME of;
	TCHAR szFileName[MAX_PATH]="";
	ZeroMemory(&of,sizeof(of));

	of.lStructSize=sizeof(of);
	of.hInstance =hInst;
	of.hwndOwner=hWnd;
	of.lpstrFilter="All Files(*.*)\0*.*\0";
	of.lpstrFile=szFileName;
	of.nMaxFile=MAX_PATH;
	of.Flags=OFN_EXPLORER|OFN_FILEMUSTEXIST|OFN_HIDEREADONLY|OFN_ALLOWMULTISELE
CT;
	of.lpstrDefExt="txt";
	of.lpstrInitialDir="C:\\";
	of.lpstrTitle="Please Select Text File to read";

	GetOpenFileName(&of);
	if(lstrlen(of.lpstrFile) == 0)
		return;
	strcpy(Out,szFileName);
}

هذا الكود لاختيار ملف واحد فقط ...اريد ان يتم تحميل مسارات الملفات الاخرى المختارة

ارجو تعديل الكود السابق

#2

حسنا عندما يختار المستخدم عدد من الملفات يتم وضع المسار الكامل لهذه الملفات في lpstrFile ويتم الفصل بينها بحرف خالي ويتم انها السلسلة بحرفيين خاليين.

هنالك دوال يمكنها فصل النصوص التي تحتوي علي حرف معين وضعه المصمم لفصل هذه النصوص (مثل strtok) كما يمكنك استخدام loop لفصل الملفات لوحدك

الشي الاخر هو زيادة حجم المتغير szFileName الي حجم اكبر من MAX_PATH لاستيعاب عدد الملفات المحددة

مثلا MAX_PATH * 6

لفتح ستة ملفات

او يمكنك تحديد قيمة معينة مثلا 4 كيلوبايت

VOID GetOpenFilePath(TCHAR* Out,HWND hWnd,HINSTANCE hInst)
{
	OPENFILENAME of;
	TCHAR szFileName[4096]="";
	ZeroMemory(&of,sizeof(of));

	of.lStructSize=sizeof(of);
	of.hInstance =hInst;
	of.hwndOwner=hWnd;
	of.lpstrFilter="All Files(*.*)\0*.*\0";
	of.lpstrFile=szFileName;
	of.nMaxFile=4096;
	of.Flags=OFN_EXPLORER|OFN_FILEMUSTEXIST|OFN_HIDEREADONLY|OFN_ALLOWMULTISELE
CT;
	of.lpstrDefExt="txt";
	of.lpstrInitialDir="C:\\";
	of.lpstrTitle="Please Select Text File to read";	

if(GetOpenFileName(&of))
	{
		char path[_MAX_PATH];
		char *nextname = &of.lpstrFile[of.nFileOffset];
		strcpy(path,of.lpstrFile);
		path[of.nFileOffset] = 0;
		while(*nextname)
		{
			//عمل اي شي مع الملف
			nextname += strlen(nextname) + 1;
		}
	}

تم تعديل هذه المشاركة بواسطة garo في 28 مارس 2008 في 10:29

( _ /)

(='.'=)

(")-(")

مواضيع مشابهة