2015-11-13 6 views
7

मैं फ़ोल्डर में फ़ाइलों के माध्यम से पुनरावृत्त करता हूं (जिसका अर्थ है कि मुझे फ़ोल्डर में नाम नहीं पता हैं), और एक पोलिश के साथ फाइल है ł चरित्र।वीबीए में यूनिकोड फ़ाइल नामों के साथ काम करना (Dir, FileSystemObject, आदि का उपयोग करके)

Dir फ़ंक्शन इसे l में परिवर्तित करता है जिसका अर्थ है कि फ़ाइल नाम बाद की तारीख में नहीं मिल सकता है। मैंने var को घोषित कर दिया है कि मैं एक स्ट्रिंग के रूप में dir मान असाइन कर रहा हूं।

मैंने एफएसओ और गेटफोल्डर की भी कोशिश की है जिसमें एक ही समस्या है।

मैंने यह भी देखा है कि फ़ाइल संवाद (फ़ोल्डर चयन मोड पर सेट) ऊपर वर्णित चरित्र को भी परिवर्तित करता है।


क्या यह एक बग है, या यह ऐसा कुछ है जिसे आसपास काम किया जा सकता है?

+0

मेरे बुरा है, मैं वास्तव में जल्दी में ऐसा किया है, लेकिन यह नहीं था यह इंगित करने के लिए कि यह एक डुप्लिकेट था, यह काम करने के लिए एक संभावित कोण को इंगित करना था, लेकिन एक नजदीक देखो के बाद यह आपके मुद्दे पर लागू नहीं होगा। मुझे एक नजदीक देखो। क्या आप अपना कोड पोस्ट कर सकते हैं? या आपने 'डिर' के लिए उपयोग किए जाने वाले चर को 'मंद' कैसे किया? क्या आपने कोशिश की * फ़ाइलें स्क्रिप्टिंग ऑब्जेक्ट * भी? – R3uK

+0

यह लिंक http://www.vbforums.com/showthread.php?555086-RESOLVED-यूनिकोड-फ़ाइल-नाम और हाइलाइट = FindNextFileW/# 4 ... दिलचस्प नहीं लगता है लेकिन यह वीबी है और न केवल वीबीए है। बाद में विशेष चरित्र को बदलने के लिए एक विधि भी है, लेकिन यह केवल उस चरित्र के लिए काम करेगी जिसके लिए आपने ट्रांसकोडिफिकेशन किया है। वैसे भी, ऐसा लगता है कि एफएसओ (फाइल स्क्रिप्टिंग ऑब्जेक्ट) में 'डिर' की तुलना में समान सीमा नहीं है, इसलिए व्यक्तिगत रूप से मैं उस तरह से जाऊंगा यदि यह आपके कोड में लागू करने के लिए जटिल नहीं है! – R3uK

+0

डैन ... एफएसओ का एक ही मुद्दा है ... क्या आपने अपना डिर वैल्यू वैरिएंट घोषित करने की कोशिश की है? (जंगली अनुमान है लेकिन इस बिंदु पर, ऐसा लगता है (कम से कम मेरे लिए) कि केवल वीबी या ट्रांसकोडिफिकेशन शेष है ...)। ट्रांसको/कन्वर्ट के लिए लिंक यहां दिए गए हैं: http://www.pcreview.co.uk/threads/workaround-for-chdir-curdir-when-path-has-unicode-characters.3155241/#post-10639076 और http: //www.vbforums.com/showthread.php?596307- कैसे-to-check-if-a-file-folder-with-unicode-filename-extists-getting-its-attributes&p=3683899&viewfull=1#post3683899 – R3uK

उत्तर

3

ऐसा लगता है कि आप इस तथ्य है कि जब VBA ही यूनिकोड वर्ण का समर्थन करता है, VBA विकास के वातावरण नहीं है द्वारा गुमराह किया जा रहा है। वीबीए संपादक अभी भी विंडोज़ में लोकेल सेटिंग के आधार पर पुराने "कोड पेज" वर्ण एन्कोडिंग का उपयोग करता है।

निश्चित रूप से FileSystemObjectet। अल। वास्तव में फ़ाइल नामों में यूनिकोड वर्णों का समर्थन करते हैं, जैसा कि निम्न उदाहरण द्वारा दिखाया गया है। 1_English.txt
सामग्री:: London is a city in England.

फ़ाइल का नाम: 2_French.txt
सामग्री: Paris is a city in France.

फ़ाइल का नाम: 3_Połish.txt
सामग्री: तीन सादा पाठ फ़ाइलें

फ़ाइल का नाम वाला कोई फ़ोल्डर के साथ Warsaw is a city in Poland.

निम्नलिखित वीबीए कोड ...

Option Compare Database 
Option Explicit 

Sub scanFiles() 
    Dim fso As New FileSystemObject, fldr As Folder, f As File 
    Set fldr = fso.GetFolder("C:\__tmp\so33685990\files") 
    For Each f In fldr.Files 
     Debug.Print f.Path 
    Next 
    Set f = Nothing 
    Set fldr = Nothing 
    Set fso = Nothing 
End Sub 

... पैदा करता तत्काल विंडो में निम्न उत्पादन ...

C:\__tmp\so33685990\files\1_English.txt 
C:\__tmp\so33685990\files\2_French.txt 
C:\__tmp\so33685990\files\3_Polish.txt 

ध्यान दें कि Debug.Print बयान क्योंकि VBA विकास के वातावरण मेरी Windows का उपयोग कर ł प्रदर्शित नहीं कर सकता l करने के लिए ł चरित्र धर्मान्तरित लोकेल (यूएस अंग्रेज़ी)।

हालांकि, निम्नलिखित कोड तीनों फ़ाइलों को सफलतापूर्वक खोल करता है ...

Option Compare Database 
Option Explicit 

Sub scanFiles() 
    Dim fso As New FileSystemObject, fldr As Folder, f As File, ts As TextStream 
    Set fldr = fso.GetFolder("C:\__tmp\so33685990\files") 
    For Each f In fldr.Files 
     Set ts = fso.OpenTextFile(f.Path) 
     Debug.Print ts.ReadAll 
     ts.Close 
     Set ts = Nothing 
    Next 
    Set f = Nothing 
    Set fldr = Nothing 
    Set fso = Nothing 
End Sub 

... प्रदर्शित

London is a city in England. 
Paris is a city in France. 
Warsaw is a city in Poland. 
+0

@ user3791372 - जब मैं लूप में 'डीबग.प्रिंट f.Size' करता हूं तो मुझे सही (गैर-शून्य) मान मिलते हैं। मुझे यकीन नहीं है कि आपका मतलब "एलओएफ" से क्या है, तो हो सकता है कि आप कुछ अलग कर रहे हों। –

+0

@ user3791372 - क्या सभी फ़ाइलों के लिए 'f.Size' वापसी शून्य है, या सिर्फ उनके नामों में" मजाकिया पात्र "वाले लोगों के लिए? –

+0

एक छिपी हुई फाइल, शायद? –

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