2009-11-03 11 views
5

मैं एक फ़ाइल नाम डेलीमीटर का उपयोग करने के लिए एक चरित्र की तलाश में हूं (मैं एक सादे टेक्स्ट स्ट्रिंग में एकाधिक फ़ाइल नाम संग्रहीत कर रहा हूं)। विंडोज :, ?, *, <, >, ", |, / और फ़ाइल नाम में \ अनुमति देने के लिए नहीं लगता है। जाहिर है, \ और / का उपयोग नहीं किया जा सकता है, क्योंकि उनका मतलब पथ के भीतर कुछ है। क्या कोई कारण है कि उनमें से किसी अन्य का उपयोग क्यों नहीं किया जाना चाहिए? मैं बस सोच रहा हूं कि / या \ के समान, उन अन्य अस्वीकृत पात्रों का विशेष अर्थ हो सकता है कि मुझे यह नहीं मानना ​​चाहिए कि पथ नामों में नहीं होगा। उन 7 अन्य पात्रों में से, इस उद्देश्य के लिए उपयोग करने के लिए निश्चित रूप से सुरक्षित या निश्चित रूप से असुरक्षित हैं?एक फ़ाइल नाम डेलीमीटर के रूप में कॉलन/तारांकन?

+0

क्यों खुद के लिए समस्याएं पैदा करते हैं? सामान्य लोगों के साथ जाएं, जैसे डैश "-" या डॉट्स "।" – ghostdog74

+0

बुरी खबर यह है कि: कई यूनिक्स सिस्टम पर एकमात्र वर्ण जिसे फ़ाइल नाम में अनुमति नहीं है "/" ​​है। अन्य सभी मान्य हैं (हालांकि उन्हें उदाहरण के लिए खोल से छिपाने के लिए भागने की आवश्यकता हो सकती है)। –

+0

आप यूनिक्स पथों में '/' का उपयोग कर सकते हैं (लेकिन यदि आप ऐसा करते हैं तो आप शैतान हैं)। केवल एक चीज के बारे में आप उपयोग नहीं कर सकते हैं शून्य है। – ratbum

उत्तर

11

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

गुण * और ? फ़ाइलों की खोज करते समय वाइल्डकार्ड के रूप में उपयोग किया जाता है।

वर्ण < और > किसी फ़ाइल के इनपुट और आउटपुट को रीडायरेक्ट करने के लिए उपयोग किए जाते हैं।

चरित्र | एक आवेदन से दूसरे एप्लिकेशन के इनपुट में पाइपिंग आउटपुट के लिए उपयोग किया जाता है।

मैं फ़ाइल नामों को अलग करने के लिए पाइप चरित्र का चयन करूंगा। इसका उपयोग पथों में नहीं किया जाता है, और इसके आकार में प्राकृतिक अलगाव की गुणवत्ता होती है।

स्ट्रिंग में एक्सएमएल का उपयोग करने के लिए एक विकल्प हो सकता है। कुछ ओवरहेड है और कुछ पात्रों को एन्कोडिंग की आवश्यकता है, लेकिन इसका फायदा यह है कि यह किसी भी अक्षर को संभाल सकता है और प्रारूप स्वयं व्याख्यात्मक और अच्छी तरह परिभाषित है।

+0

'" 'एक पथ में अनुमति दी है नहीं: यह एक सीमांकक जो एक रास्ता चारों ओर से घेरे है जब यह विशेष वर्ण माना जाता है, लेकिन यह पथ का हिस्सा नहीं है –

+1

@Adrien:। यह निश्चित रूप से है यह या तो भर में उपयोग किया जा सकता है। पूरे पथ या एक पथ, सी की तरह में एक तत्व के आसपास: \ "प्रोग्राम फ़ाइलें" \ एडोब – Guffa

+0

@guffa:।। मैं जोर देते हैं, है नहीं है डबल qoutes विशेष वर्ण से बचने के लिए एक मतलब के रूप में उपयोग किया जाता है, रिक्त स्थान सटीक होना करने के लिए । वे विशेष रूप से विंडोज शेल और कमांड प्रॉम्प्ट से व्याख्या कर रहे हैं, लेकिन सब पर फ़ाइल नाम का हिस्सा नहीं हैं। आप मुझे एक फ़ाइल जिसका नाम, दोहरे उद्धरण चिह्नों में शामिल है या तो कमांड प्रॉम्प्ट या Windows एपीआई का उपयोग कर बनाने के लिए एक तरह से दिखा सकते हैं? –

0

यह वास्तव में संभव है \ को छोड़कर हर संभव चरित्र के साथ प्रोग्राम के रूप में फ़ाइलें बनाने के लिए। (कम से कम, यह एक समय में सच था और यह संभव है कि विंडोज ने अपनी नीति बदल दी है।) स्वाभाविक रूप से, कुछ पात्रों वाली फाइलें दूसरों के मुकाबले काम करना मुश्किल हो जाएंगी।

यह निर्धारित करने के लिए कि आप कौन से पात्र विंडोज़ को अनुमति देते हैं, आप क्या उपयोग कर रहे थे?

अद्यतन: विंडोज़ द्वारा अनुमत वर्णों का सेट अंतर्निहित फाइल सिस्टम और अन्य कारकों द्वारा भी निर्धारित किया जाता है। एक blog entry on MSDN है जो इसे और अधिक विस्तार से बताता है।

+0

यदि आप Windows Explorer में किसी फ़ाइल का नाम बदलने का प्रयास करते हैं, तो यह उस सूची के साथ आता है, और आपको इसे करने से रोकता है। मैंने अभी माना है कि यह एक मौलिक स्तर पर ऐसा था - लेकिन आप कह रहे हैं कि ऐसा नहीं है? – Smashery

+0

एक्सप्लोरर के नीचे कई परतें हैं। :) मैंने अधिक जानकारी के साथ अपना जवाब अपडेट कर लिया है। –

+0

नहीं करता है: फ़ाइल को विभिन्न फोर्क में अलग करें ... नाम: टेक्स्ट, नाम: डेटा, आदि? और आप विंडोज़ पर फ़ाइल नाम में स्लैश कैसे प्राप्त करते हैं? मैं इस भ्रम के तहत हूं कि यह सिस्टम कॉल स्तर पर समकक्ष के रूप में स्लैश और बैकस्लैश का इलाज करता है। –

0

आप एल्टी कुंजी संयोजन जैसे किसी भी चरित्र का उपयोग नहीं करते हैं जैसे ‡ (Alt + 0135) delimiter के रूप में?

+0

वह चरित्र कोड क्या होगा? –

+2

यह फ़ाइल नामों में एक कानूनी चरित्र है और उस कारण से एक सेपरेटर के रूप में उपयोग नहीं किया जा सकता है। – MSalters

1

मैंने अतीत में * का उपयोग किया है। लिनक्स/यूनिक्स के लिए पोर्टेबिलिटी का कारण। सच है, तकनीकी रूप से इसका उपयोग उन फाइल सिस्टम पर भी किया जा सकता है। व्यावहारिक रूप से, सभी सामान्य ओएस इसे वाइल्डकार्ड के रूप में उपयोग करते हैं, इस प्रकार यह फ़ाइल नामों में काफी असामान्य है। साथ ही, यदि आप फ़ाइल नाम में * डालते हैं तो प्रोग्राम आश्चर्यचकित नहीं होते हैं।

8

विंडोज सेमीकॉलन का उपयोग फ़ाइल नाम डेलीमीटर के रूप में करता है: ;। पाथ पर्यावरण परिवर्तक को देखें, यह पथ तत्वों के बीच ; से भरा है।

(इसके अलावा, पायथन में, os.path.pathsep रिटर्न ";", जबकि यह यूनिक्स पर ":" तक विस्तारित है)

+0

अजीब, हालांकि, कि मैं उनमें से अर्धविराम के साथ फाइलें बना सकते हैं। – Smashery

+0

यह अजीब बात है, लेकिन यह वही तरीका है ... जब आप पथ जोड़ते हैं जिसमें% PATH% में ';' होता है, तो जोड़ा गया पथ '" (जिसे पथ में अनुमति नहीं है) से घिरा हुआ है। शायद ''' के साथ आसपास के फ़ाइल नाम और उन्हें'; 'से अलग करना आपका समाधान है। –

+0

यदि आप '' 'के साथ फ़ाइल नामों को घेरते हैं तो आप लगभग किसी भी अन्य चरित्र को डिलीमीटर के रूप में उपयोग कर सकते हैं, जैसे कि अल्पविराम। फिर आप स्ट्रिंग को किसी सरणी में पार्स करने के लिए एक सामान्य सीएसवी रीडिंग रूटीन का उपयोग कर सकते हैं। –

0

तो आपको केवल एक बृहदान्त्र के उपस्थिति है, और यह प्रोग्राम के बनाने वाले हैं, क्यों नहीं एक यूटीएफ -8 चरित्र का उपयोग जो कि को एक कोलन की तरह दिखता है?

मेरी पहली पसंद, संशोधक पत्र (U + A789) होगा के रूप में यह एक विशिष्ट RTL चरित्र है और कोलन की तरह एक बहुत कुछ दिखाई देता है। यह क्या मैं ऐसे file_2017-05-04_16꞉45꞉22_clientNo.jpg

मैं, हिब्रू विराम Sof Pasuq (U + 05C3) जैसे पात्रों से दूर रहना होगा, क्योंकि यह एक लीटर चरित्र है के रूप में उपयोग जब मैं फ़ाइल नाम में एक पूर्ण दिनांक समय की जरूरत है, और साथ गड़बड़ हो सकता है एक सिस्टम फ़ाइल नाम को कैसे संरेखित करता है।

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