फ़ाइल नाम में स्वीकृत वर्ण


138

ऑपरेटिंग सिस्टम के आधार पर, मुझे फ़ाइल नाम में अनुमत वर्णों की सूची कहां मिल सकती है? (लिनक्स पर उदाहरण के लिए, वर्ण :फ़ाइल नाम में अनुमत है, लेकिन विंडोज पर नहीं)


.NET विंडोज के लिए वह जानकारी प्रदान करता है।
लीपी


8
@kreker ध्यान दें कि आपका प्रश्न Android के बारे में है
congusbongus


जवाबों:


106

आपको विकिपीडिया फ़ाइल नाम पेज से शुरू करना चाहिए । इसमें एक सभ्य आकार की तालिका है ( फ़ाइल नाम सीमाओं की तुलना ), बहुत सारे फ़ाइल सिस्टम के लिए आरक्षित वर्णों की सूची।

इसमें प्रत्येक फ़ाइल सिस्टम के बारे में अन्य जानकारी का ढेर भी है , जिसमें आरक्षित फ़ाइल नाम जैसे CONMS-DOS शामिल हैं। मैंने उल्लेख किया है कि केवल इसलिए कि मुझे एक बार काट लिया गया था जब मैंने एक सम्मिलित फ़ाइल को छोटा कर दिया const.hथा con.hऔर आधे घंटे लगा रहा था कि संकलक ने क्यों लटका दिया।

DOS ने उपकरणों के लिए एक्सटेंशन को अनदेखा कर दिया, जो कि con.hबिल्कुल उसी तरह था con, जैसे इनपुट कंसोल (मतलब, निश्चित रूप से, कंपाइलर मेरे हेडर फाइल में टाइप करने से पहले इंतजार कर रहा था कि यह जारी रहेगा)।


4
मुझे विकिपीडिया पृष्ठ कुछ अस्पष्ट और भ्रमित लगता है, जैसे "कुछ ऑपरेटिंग सिस्टम कुछ विशेष वर्णों को प्रतिबंधित करते हैं ..."। मैं वास्तव में एक पूर्ण तालिका की तलाश कर रहा हूं जो सभी अनुमत और अस्वीकृत वर्णों को सूचीबद्ध करता है।
अजगर दोस्त

7
@python, उस तालिका को न देखें, उसके नीचे बड़े माननीय को देखें ("फ़ाइल नाम सीमाओं की तुलना" शीर्षक से)। ऐसा इसलिए है नहीं इसकी सामग्री में इतना अस्पष्ट।
paxdiablo

52
संभवतः आपको बस उस POSIX "Fully portable filenames"प्रविष्टि को देखना है , जो इनकी सूची बनाती है:A–Z a–z 0–9 . _ -
व्लादिमीर कोर्ना


1
@ चेक केवल विंडोज, ओएसएक्स और लिनक्स की तुलना में अधिक ओएस हैं ... कुछ में बहुत सरल फ़ाइल सिस्टम हैं।
सुंदर पासा

32

ठीक है, इसलिए यदि आप केवल मुख्य खिलाड़ियों के फाइल सिस्टम की परवाह करते हैं , तो फाइल सिस्टम की तुलना देखें :

इसलिए किसी भी बाइट को छोड़कर NUL, \, /, :, *, ", <, >, |/ फ़ोल्डर कॉल करेगा और आपको फ़ाइलें नहीं हो सकता है .या ..और (बेशक) कोई नियंत्रण नहीं वर्ण।


7
यह सही नहीं है। लिनक्स अनुमति नहीं देता है /। विंडोज बैकस्लैश और कुछ स्ट्रिंग्स (जैसे CON) की अनुमति नहीं देता है ।
किलोडेके

7
हाँ, इसलिए मैंने कहा छोड़कर
CpILL

2
मैक पर (HFS + चल रहा है), मैं :उनके नाम के साथ फाइल बनाने में सक्षम हूं ।
इरवामन

यह सही नहीं है। अधिक वर्णों के लिए यह उत्तर देखें जो Windows अनुमति नहीं देता है।
mbomb007

विंडोज किसी भी नियंत्रण चार्ट की अनुमति नहीं देता है, या तो (लेकिन मैक करता है, NUL के अलावा)
थॉमस टेम्प्लेमन

23

विंडोज ओएस पर एक फ़ाइल बनाएं और इसे \फ़ाइल नाम में एक अमान्य वर्ण दें । परिणामस्वरूप आपको फ़ाइल नाम में सभी अमान्य वर्णों के साथ एक पॉपअप मिलेगा।

यहां छवि विवरण दर्ज करें


5

/खोजक में Mac OS X (जिसे अब MacOS कहा जाता है) के बारे में अधिक सटीक होना :यूनिक्स फाइल सिस्टम में व्याख्या किया गया है।

यह बैकवर्ड कम्पैटिबिलिटी के लिए किया गया था जब एप्पल क्लासिक मैक ओएस से चला गया था।

/फाइंडर में एक फ़ाइल नाम में एक का उपयोग करना वैध है , टर्मिनल में उसी फ़ाइल को देखकर यह एक के साथ दिखाई देगा :

और यह दूसरे तरीके से भी काम करता है: आप /टर्मिनल के साथ फ़ाइल नाम में एक का उपयोग नहीं कर सकते हैं , लेकिन :यह ठीक है और /फाइंडर में एक के रूप में दिखाई देगा ।

कुछ एप्लिकेशन अधिक प्रतिबंधात्मक हो सकते हैं और भ्रम से बचने के लिए दोनों वर्णों को प्रतिबंधित कर सकते हैं या क्योंकि वे पिछले क्लासिक मैक ओएस से या प्लेटफार्मों के बीच नाम संगतता के लिए तर्क रखते थे।


0

"अंग्रेजी लोकेल" फ़ाइल नामों के लिए, यह अच्छी तरह से काम करता है। मैं अपलोड किए गए फ़ाइल नामों को सैनिटाइज़ करने के लिए इसका उपयोग कर रहा हूं। फ़ाइल नाम डिस्क पर किसी भी चीज़ से जुड़ा होने के लिए नहीं है, यह तब है जब फ़ाइल डाउनलोड की जा रही है इसलिए कोई पथ जाँच नहीं है।

$file_name = preg_replace('/([^\x20-~]+)|([\\/:?"<>|]+)/g', '_', $client_specified_file_name);

मूल रूप से यह विंडोज और अन्य ओएस के लिए सभी गैर-मुद्रण योग्य और आरक्षित वर्णों को स्ट्रिप्स करता है। आप अन्य स्थानों और कार्यात्मकताओं का समर्थन करने के लिए आसानी से पैटर्न का विस्तार कर सकते हैं


-1

यहाँ अजगर में फ़ाइल नाम को साफ़ करने का कोड है।

import unicodedata

def clean_name(name, replace_space_with=None):
    """
    Remove invalid file name chars from the specified name

    :param name: the file name
    :param replace_space_with: if not none replace space with this string
    :return: a valid name for Win/Mac/Linux
    """

    # ref: https://en.wikipedia.org/wiki/Filename
    # ref: /programming/4814040/allowed-characters-in-filename
    # No control chars, no: /, \, ?, %, *, :, |, ", <, >

    # remove control chars
    name = ''.join(ch for ch in name if unicodedata.category(ch)[0] != 'C')

    cleaned_name = re.sub(r'[/\\?%*:|"<>]', '', name)
    if replace_space_with is not None:
        return cleaned_name.replace(' ', replace_space_with)
    return cleaned_name

2
कोड अमान्य (आरक्षित) नामों की जाँच नहीं करता है, और रिप्लेसमेंट_स्पेस_ के साथ किसी अमान्य वर्ण की भी जाँच नहीं करता है। फ़ाइल नाम की लंबाई कार्यक्षेत्र से परे है। तो, :return: a valid name for Win/Mac/Linuxसभी परिस्थितियों में सच नहीं है।
एके
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.