2010-08-11 12 views
7

कुछ फ़ोल्डर हैं जिनमें 100 से अधिक फ़ाइलें हैं। लेकिन सभी फाइलें और फ़ोल्डर नाम गलत एन्कोडिंग नामों (यूटीएफ-> एएनएसआई) के साथ टूटा हुआ है।लंबा खोजें (> 255) फ़ाइल नाम

"C:\...\Госдача-Лечебни корпус\вертолетка\Госдача-Лечебни корпус\Госдача-Лечебни корпус\вертолетка\Госдача-Лечебни корпус\вертолетка\Госдача-Лечебни корпус\Госдача-Лечебни корпус\Госдача-Лечебни корпус\вертолетка\Госдача-Лечебни корпус\Госдача-Лечебни корпус\вертолетка\Госдача-Лечебни корпус\..." 

नियमित समारोह Utf8ToAnsi यह finxing, लेकिन FindFirst 255 प्रतीकों से अधिक समय नाम के साथ फ़ोल्डर्स खोज नहीं कर सकते।

यह मुझे केवल 70/100 फाइलें देता है।

उत्तर

13

FindFirst Win32 एपीआई समारोह FindFirstFile लपेटता, और कहा कि समारोह के यूनिकोड संस्करण में लंबे समय के 32,767 वर्णों तक पथ हैं, यदि आपको पथ आप में गुजर रहे हैं, \\?\C:\Folder\Folder\* की तरह करने के लिए \\?\ पहले जोड़ें कर सकते हैं।

डेल्फी 200 9 के बाद से और यूनिकोड आपके लिए नए कॉल का काम करता है, तो आप केवल FindFirst और सह वहां का उपयोग कर सकते हैं। डेल्फी 2007 और पहले (एएनएसआई संस्करण) के लिए, आपको को Windows.pas से सीधे कॉल करने की आवश्यकता होगी। अधिक जानकारी के लिए प्लेटफार्म एसडीके के Naming a file अनुभाग देखें।

ध्यान दें कि \\?\ का उपयोग करके पथ प्रसंस्करण के विभिन्न बिट अक्षम करता है, इसलिए सुनिश्चित करें कि यह किसी भी '।' के बिना पूरी तरह योग्यता प्राप्त पथ है। या '..' प्रविष्टियां। आप फाइलों को खोलने, नाम बदलने, या लंबे पथ वाले फ़ाइलों की प्रतिलिपि बनाने के लिए एक ही चाल का उपयोग कर सकते हैं।

शैल (एक्सप्लोरर) इस का समर्थन नहीं करता है, इसलिए आपको SHFileOperation (रीसायकल बिन को हटाने के लिए) या ShellExecute जैसी चीज़ों के लिए उन्हें अधिकतम MAX_PATH वर्णों तक सीमित करने की आवश्यकता है। कई मामलों में आप लंबे समय के बजाय डॉस 8.3 नामों में गुजरकर समस्या के आसपास काम कर सकते हैं। FindFirst's TSearchRec छोटे नामों का पर्दाफाश नहीं करता है, लेकिन FindFirstFile की TWin32FindData संरचना cAlternateFileName के रूप में होती है।

0

गहरी एक आप के बारे में पता है, और करने के लिए बदलें वर्तमान निर्देशिका (ChDir) तो FindFirst या FindFirstFile करने के लिए एक रिश्तेदार पथ गुजरती हैं।

उस फ़ाइल नाम में कोई पथ घटक MAX_PATH वर्णों से अधिक नहीं है, इसलिए आप एक समय में एक चरण में निर्देशिकाओं में अपना रास्ता काम करने में सक्षम होना चाहिए।

सावधान रहें कि बहुभाषी प्रोग्राम वर्तमान निर्देशिका में परिवर्तनों के प्रति संवेदनशील हो सकते हैं क्योंकि किसी प्रक्रिया में सभी धागे द्वारा साझा की जाने वाली केवल एक वर्तमान निर्देशिका है।

संबंधित मुद्दे