CFileDialog
कक्षा का उपयोग करके, मैं एक लंबी पथ के साथ निर्देशिका में रखी गई कई फाइलों का चयन करता हूं। यह ठीक है जब मैं केवल एक या दो फाइलों का चयन करता हूं; लेकिन जब मैं एक ही समय में तीन फाइलों का चयन करता हूं तो यह तीसरे फ़ाइल पथ का केवल एक हिस्सा देता है। (ऐसा लगता है कि यह संभवतः 512 अक्षरों तक सीमित है) मैं इसे कैसे हल कर सकता हूं?क्यों CFileDialog :: फ़ाइल पथ लंबा होने पर GetNextPathName काम नहीं करता है?
उत्तर
एमएफसी आकार _MAX_PATH
के डिफ़ॉल्ट बफर का उपयोग करता है और यही कारण है कि आप उस व्यवहार को देख रहे हैं। CFileDialog::CFileDialog
के कार्यान्वयन के लिए dlgfile.cpp
पर देखें और आप m_ofn.lpstrFile
और m_ofn.nMaxFile
सेट किए जा रहे हैं।
यदि आप चाहें तो एक बड़ा बफर निर्दिष्ट कर सकते हैं। DoModal
पर कॉल करने से पहले आप OPENFILENAME
पर पॉइंटर प्राप्त करने के लिए CFileDialog::m_pOFN
सदस्य तक पहुंच सकते हैं कि CFileDialog
उस का उपयोग सीधे और अपडेट करेगा या CFileDialog::GetOFN
पर कॉल करने के लिए संरचना का संदर्भ प्राप्त करने और उसे अपडेट करने के लिए कॉल करेगा।
किसी भी तरह से आप पाएंगे यह सहायक: http://msdn.microsoft.com/en-US/library/ms646839(v=vs.80).aspx
यदि आप इसके आसपास काम करने की परेशानी से गुज़रने जा रहे हैं, तो आप [सामान्य आइटम संवाद] (http://msdn.microsoft.com/en-US/library/bb776913.aspx) का उपयोग करने पर भी विचार करना चाहेंगे। बजाय। 'GetOpenFileName' API को Vista के रिलीज़ के साथ बहिष्कृत किया गया था, लेकिन अभी भी विरासत अनुप्रयोगों के लिए समर्थित है। –
धन्यवाद। आपका विवरण और लिंक भी मेरे लिए काम करता है। ;) – Javid
यह मानते हुए कि अपने कोड इस तरह दिखता है:
CFileDialog dialog(...);
dialog.DoModal();
फ़ाइलों को समर्थन करने के लिए इच्छा की अधिकतम संख्या निर्धारित, उदाहरण के लिए :
#define MAX_FILE_NAMES 256
DoModal
कॉल करने से पहले इस जोड़ें:
CString data;
dialog.m_pOFN->nMaxFile = (MAX_FILE_NAMES*(MAX_PATH+1))+1;
dialog.m_pOFN->lpstrFile = data.GetBuffer((MAX_FILE_NAMES*(MAX_PATH+1))+1);
इस जोड़े DoModal
बुला के बाद:
data.ReleaseBuffer();
यह खिड़की के 'MAX_PATH' के साथ क्या करना है? – bames53
इसे डिफ़ॉल्ट रूप से आकार '_MAX_PATH' के बफर का उपयोग करके एमएफसी के साथ करना है। यह अतिसंवेदनशील हो सकता है। –