অপারেটিং সিস্টেমের উপর নির্ভর করে ফাইলনেমগুলিতে আমি অনুমোদিত অক্ষরের একটি তালিকা কোথায় পাব? (যেমন লিনাক্সে, :
ফাইলের নামগুলিতে অক্ষরটি অনুমোদিত তবে উইন্ডোজে নয়)
অপারেটিং সিস্টেমের উপর নির্ভর করে ফাইলনেমগুলিতে আমি অনুমোদিত অক্ষরের একটি তালিকা কোথায় পাব? (যেমন লিনাক্সে, :
ফাইলের নামগুলিতে অক্ষরটি অনুমোদিত তবে উইন্ডোজে নয়)
উত্তর:
আপনার উইকিপিডিয়া ফাইলের নাম পৃষ্ঠা দিয়ে শুরু করা উচিত । এটিতে একটি শালীন আকারের টেবিল রয়েছে ( ফাইলের নাম সীমাবদ্ধতার তুলনা ), বেশ কয়েকটি ফাইল সিস্টেমের জন্য সংরক্ষিত অক্ষরগুলি তালিকাভুক্ত করে।
এটিতে এমএস-ডস-এর অধীনে সংরক্ষিত ফাইলের নাম সহ প্রতিটি ফাইল সিস্টেম সম্পর্কিত অন্যান্য তথ্যের আধিক্য রয়েছে CON
। আমি উল্লেখ করেছি যে কেবল তখনই আমার দ্বারা দংশন হয়েছিল যখন আমি কোনও ফাইল অন্তর্ভুক্ত করে ছোট করে const.h
দিয়েছিলাম con.h
এবং সংকলকটি কেন স্তব্ধ হয়েছিল তা নির্ধারণের জন্য আধ ঘন্টা ব্যয় করেছিল।
ডিভাইসগুলির জন্য ডস উপেক্ষা করা এক্সটেনশানগুলি সরিয়ে দেয় যাতে ইনপুট কনসোলের ( con.h
হুবহু con
, সংকলকটি এটি চালিয়ে যাওয়ার আগে শিরোনাম ফাইলটিতে টাইপ করার অপেক্ষায় ছিল )।
POSIX "Fully portable filenames"
এন্ট্রিটি দেখতে হবে যা এগুলি তালিকাভুক্ত করেছে:A–Z a–z 0–9 . _ -
ঠিক আছে, তাই এ খুঁজছেন ফাইল সিস্টেম তুলনা আপনি শুধুমাত্র প্রধান খেলোয়াড়দের ফাইল সিস্টেম যত্নশীল:
NUL
, \
, /
, :
, *
, "
, <
, >
, |
। এছাড়াও, শুরু বা শেষে কোনও স্পেস অক্ষর নেই, এবং শেষে কোনও পিরিয়ড নেই ।:
অথবা ব্যতীত যে কোনও বৈধ ইউনিকোড/
NUL
বা বাদে কোনও বাইট/
তাই কোনো বাইট ছাড়া NUL
, \
, /
, :
, *
, "
, <
, >
, |
/ ফোল্ডার কল এবং আপনি ফাইল থাকতে পারে না .
বা ..
এবং (অবশ্যই) কোন নিয়ন্ত্রণ অক্ষর।
/
। উইন্ডোজ ব্যাকস্ল্যাশ এবং কিছু স্ট্রিং (উদাঃ CON
) অনুমতি দেয় না ।
:
তাদের নামে ফাইল তৈরি করতে সক্ষম হয়েছি ।
/
ফাইন্ডারে ম্যাক ওএস এক্স (বর্তমানে ম্যাকোস নামে পরিচিত) সম্পর্কে আরও সুনির্দিষ্ট :
হওয়ার জন্য ইউনিক্স ফাইল সিস্টেমে ব্যাখ্যা করা হয়েছে।
এটি অ্যাপল ক্লাসিক ম্যাক ওএস থেকে সরে গেলে পশ্চাদপদ সামঞ্জস্যের জন্য করা হয়েছিল।
/
ফাইন্ডারে একটি ফাইলের নাম ব্যবহার করা বৈধ , টার্মিনালে একই ফাইলটি এটির সাথে প্রদর্শিত হবে :
।
এবং এটি অন্যদিকেও কাজ করে: আপনি /
টার্মিনালের সাথে কোনও ফাইলের নাম ব্যবহার করতে পারবেন না , তবে একটি :
ঠিক আছে এবং /
এটি ফাইন্ডারে প্রদর্শিত হবে।
কিছু অ্যাপ্লিকেশনগুলি আরও বিধিনিষেধযুক্ত হতে পারে এবং বিভ্রান্তি এড়াতে বা উভয় অক্ষরকে নিষিদ্ধ করতে পারে কারণ তারা আগের ক্লাসিক ম্যাক ওএস থেকে প্ল্যাটফর্মের মধ্যে নামের সামঞ্জস্যের জন্য যুক্তি রেখেছিল।
"ইংলিশ লোকালে" ফাইলের নামের জন্য, এটি দুর্দান্তভাবে কাজ করে। আমি এটি আপলোড করা ফাইলের নাম স্যানিটাইজ করার জন্য ব্যবহার করছি। ফাইলের নামটি ডিস্কের যে কোনও কিছুর সাথে সংযুক্ত থাকার অর্থ নয়, ফাইলটি ডাউনলোড করার সময় এটির জন্য কোনও পথ চেক নেই।
$file_name = preg_replace('/([^\x20-~]+)|([\\/:?"<>|]+)/g', '_', $client_specified_file_name);
মূলত এটি উইন্ডোজ এবং অন্যান্য ওএস-এর জন্য সমস্ত মুদ্রণযোগ্য এবং সংরক্ষিত অক্ষরগুলি বাদ দেয়। অন্যান্য লোকেল এবং কার্যকারিতা সমর্থন করার জন্য আপনি সহজেই প্যাটার্নটি প্রসারিত করতে পারেন ।
পাইথনে ফাইলের নাম পরিষ্কার করার কোড এখানে।
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
:return: a valid name for Win/Mac/Linux
সব পরিস্থিতিতে সত্য নয়।