زيادة عدد الأحرف في حقل اسم الملف من الحوار اختيار ملف GetOpenFileName

StackOverflow https://stackoverflow.com/questions/361350

سؤال

ولدينا التطبيق يسمح ملفات متعددة يتم اختيارها في حوار اختيار الملف الذي يظهر عبر وظيفة GetOpenFileName (ينطبق هذا السؤال أيضا إلى الناس باستخدام CFileDialog، الخ ...)

ويبدو أن هناك حد اقصى لعدد الأحرف التي يمكن كتابتها في الحقل اسم الملف. (259 يبدو أن الرقم السحري - لا يدري لماذا)

ولقد حاول تغيير التالية الأعضاء في OPENFILENAME هيكل :

وlpstrFile - أشر إلى عازلة الخاصة بنا، والحجم في 4K بايت nMaxFile - لتعيين حجم lpstrFile (نحن تجميع ANSI، لذلك هذا هو فعال 4000

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

وانا ذاهب الى تجربة إرسال رسالة EM_SETLIMITTEXT إلى السيطرة، ولكن أريد أن أعرف إذا كان أي شخص آخر لديه الحل.

وتحرير - حل هذه نفسي: <لأ href = "https://stackoverflow.com/questions/361350/increase-number-of-characters-in-filename-field-of-getopenfilename-file-selecti#394443" > حل أنا لا يمكن أن تقبل من الإجابة الخاصة بي، ولكن هنا هو للأجيال القادمة. إذا كان أي شخص آخر لديه حل أفضل، يرجى بعد ذلك - أو لا تتردد في وزارة الدفاع حتى حل بي والباحثين في المستقبل حتى تجد في أعلى

هل كانت مفيدة؟

المحلول

وتبين أن تحكم التحرير (على الأقل في بيئة تطوير بلدي) هو مربع التحرير والسرد، لذلك EM_SETLIMITTEXT ليس مناسبا.

وبدلا من ذلك، لقد تتبعت مربع التحرير والسرد باستخدام GetDlgCtrl على الأصل من ملف الحوار المفتوح (أفعل هذا في معالج OnInitDialog)، يطرح للCComboBox*، ثم استدعاء LimitText() لتعيين الحد.

ويمكن أيضا أن يتم ذلك عن طريق إرسال رسالة CB_LIMITTEXT لرقابة لأولئك منكم الذين لا يعملون مع CFileDialog. القيمة المناسبة هنا هي على الأرجح قيمة OPENFIILENAME.nMaxFile الذي تم تمريره في.

نصائح أخرى

تسمية ملف أو دليل على MSDN :

<اقتباس فقرة>   

في ويندوز API (مع بعض الاستثناءات التي نوقشت في الفقرات التالية)، الحد الأقصى لطول مسار هو MAX_PATH، الذي يعرف بأنه 260 حرفا.

وحتى لو كنت قد إجبار سلاسل أطول من الحوار، قد واجهت مشاكل أسفل الخط عند استخدام واجهات برمجة التطبيقات التي تم تلوينها ضد MAX_PATH.

وومستندات تذهب إلى القول:

<اقتباس فقرة>   

ووAPI ويندوز لديها العديد من الوظائف   التي لديها أيضا إصدارات Unicode إلى   تسمح مسار طول الموسعة ل   الحد الأقصى الكلي طول المسار من 32،767   الشخصيات. هذا النوع من المسار   تتألف من عناصر مفصولة   الخطوط المائلة العكسية، كل ما يصل إلى القيمة   عاد في   المعلمة lpMaximumComponentLength من   وظيفة GetVolumeInformation. إلى   تحديد مسار طول الموسعة، استخدم   البادئة "\\?\". فمثلا،   "\\?\D:\<very long path>". (ال   الأحرف < > تستخدم هنا ل   الوضوح البصري ولا يمكن أن تكون جزءا من   سلسلة مسار صحيح)

وأعتقد أن هذا هو الحد الثابت الذي لا يمكن تجاوزه. المرة الوحيدة التي يجب أن يهم هو عندما تريد تحديد أكثر من ملف واحد، لأن الحد هو ما يكفي للحد الأقصى لطول اسم الملف.

ولقد أضاف "كل الملفات" الزر لهذه الحوارات لفتح كافة الملفات في مجلد. هذا هو الحل الوحيد الذي وجدت.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top