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