2011-01-25 9 views
5

मुझे लगता है कि MAX_PATH सीमा को पार कर एक सर्वर पर कुछ फ़ाइलें के किसी भी रूप के साथ लंबे समय पथ नाम से अधिक पुनरावृति करने के लिए। मैंने बार-बार सुना है कि आप पथ में पूर्व-लंबित \\? \ द्वारा उन फ़ाइलों को सूचीबद्ध कर सकते हैं। हालांकि, यह FindFirstFile[Ex] और उसके सहयोगियों के साथ समस्या का समाधान नहीं करता है क्योंकि वे डेटा संरचना का उपयोग करते हैं जो फ़ाइल नाम की लंबाई को MAX_PATH तक सीमित करता है।कैसे Windows API

वहाँ एक ऐसा नाम है जो बहुत लंबा है कि फ़ाइलें ढूंढने के लिए निर्देशिका संरचना से अधिक पुनरावृति करने के लिए किसी भी अन्य रास्ता नहीं है? मैंने उपयोगिताएं देखी हैं जो इसे करती हैं लेकिन उनमें से कोई भी स्रोत फ़ॉर्म में उपलब्ध नहीं है।

ध्यान दें कि मैं नेट बीसीएल लोगों से ब्लॉग प्रविष्टियों देखा और लिंक वे प्रदान का पालन किया है।

मैं सादगी, लेकिन किसी भी स्वतंत्र रूप से उपलब्ध भाषा अब के लिए क्या करेंगे के लिए सी या सी ++ में यह करने के लिए पसंद करेंगे।

कोड, दस्तावेज़ या उपयोगी कुछ भी पॉइंटर्स की सराहना की जाती है।

उत्तर

9

मुझे नहीं लगता कि यहां कोई समस्या है। आप WIN32_FIND_DATA का जिक्र कर रहे हैं जो वास्तव में MAX_PATH तक सीमित फ़ाइल नामों को वापस कर देता है। लेकिन चूंकि यह केवल फ़ाइल नाम है, और पथ छोड़ा गया है, कोई सीमा नहीं है।

एक निर्देशिका के भीतर, एक ऑब्जेक्ट (फ़ाइल या फ़ोल्डर) लंबाई में सीमित है, आमतौर पर 255 वर्णों तक सीमित है। आप के पैरामीटर lpMaximumComponentLength पैरामीटर के साथ यह निर्धारित कर सकते हैं कि यह सीमा क्या है। मैं अगर किसी भी मात्रा विंडोज में रखा 255

FindFirstFile करने के लिए कॉल से अधिक में एक अधिकतम घटक लंबाई हो सकता था एक अशक्त-समाप्त हो जाता है स्ट्रिंग, lpFileName जो निर्देशिका और फ़ाइल नाम (उदाहरण के लिए "* .txt निर्दिष्ट करता है प्राप्त करता है आश्चर्य होगा ", कहें) खोजने के लिए। प्रलेखन राज्यों:

इस समारोह के एएनएसआई संस्करण में, नाम पात्रों MAX_PATH तक सीमित है। 32,767 widecharacters को इस सीमा का विस्तार करने के लिए, "\\? \" पथ के लिए समारोह के यूनिकोड संस्करण और आगे जोड़ते कहते हैं।

+0

धन्यवाद डेविड, आप बिल्कुल सही थे। पूछने से पहले एपीआई का उपयोग करने की कोशिश न करने के लिए मुझे यही मिलता है। :) वास्तव में समयपूर्व अनुकूलन? – JimR