উইন্ডোজ এবং লিনাক্স ডিরেক্টরিতে কোন অক্ষর নিষিদ্ধ?


355

আমি জানি যে লিনাক্সে / অবৈধ এবং উইন্ডোতে নিম্নলিখিতগুলি অবৈধ (আমার মনে হয়) * . " / \ [ ] : ; | ,

আমি আর কি মিস করছি?

আমার অবশ্য একটি বিস্তৃত গাইড দরকার এবং এমন একটি যা ডাবল-বাইট চরিত্রগুলিকে বিবেচনা করে। বাইরের সংস্থাগুলির সাথে লিঙ্ক করা আমার সাথে ভাল।

আমার প্রথমে ফাইলসিস্টেমে একটি নাম ব্যবহার করে একটি ডিরেক্টরি তৈরি করতে হবে যাতে নিষিদ্ধ অক্ষর থাকতে পারে, তাই আমি এই অক্ষরগুলিকে আন্ডারস্কোর দিয়ে প্রতিস্থাপন করার পরিকল্পনা করছি। আমার তখন এই ডিরেক্টরিটি এবং এর বিষয়বস্তুগুলি একটি জিপ ফাইলে লিখতে হবে (জাভা ব্যবহার করে), তাই জিপ ডিরেক্টরিগুলির কোনও অতিরিক্ত পরামর্শ প্রশংসা করা হবে।


13
আপনার উল্লিখিত কয়েকটি চরিত্রটি উইন্ডোতে আসলে অনুমোদিত। এটি দেখুন:echo abc > "ab.;,=[1]"
ডলম্যান

3
এছাড়াও ভুলে যাবেন না <এবং> উইন্ডোজ অবৈধ are
আরেকটি পার্কার

4
/ লিনাক্সে অবৈধ নয়। টাইপ করার সময় আপনাকে এটিকে এড়াতে হবে
ডেভিড সি বিশপ

5
@ ডেভিডসি.বিশপ: এই এসও পোস্টটি দৃ .়ভাবে জানিয়েছে যে লিনাক্স কার্নেল আপনাকে একটি স্ল্যাশযুক্ত ফাইলের সাথে কাজ করতে বাধা দেবে। আপনি কি এটি কাজ করতে সক্ষম হয়েছেন?
সোরেন বর্জনস্টাড

14
"/ লিনাক্সে অবৈধ নয় You টাইপ করার সময় আপনাকে এটিকে এড়াতে হবে" - এই বিবৃতিটি সম্পূর্ণ ভুল। ফাইলনামের উপাদানগুলিতে / থাকতে পারে না এবং এড়িয়ে যাওয়ার কোনও প্রভাব নেই।
জিম বাল্টার

উত্তর:


215

নিষিদ্ধ ফাইলনাম অক্ষরের একটি "বিস্তৃত গাইড" উইন্ডোজে কাজ করবে না কারণ এটি ফাইলের নাম পাশাপাশি অক্ষর সংরক্ষণ করে। হ্যাঁ, * " ?এবং অন্যান্য চরিত্রগুলি নিষিদ্ধ, তবে কেবলমাত্র বৈধ অক্ষর দ্বারা রচিত অসীম সংখ্যা রয়েছে যা নিষিদ্ধ। উদাহরণস্বরূপ, স্পেস এবং বিন্দুগুলি বৈধ ফাইল নামের অক্ষর, তবে কেবলমাত্র এই অক্ষরের মধ্যে রচিত নাম নিষিদ্ধ।

উইন্ডোজ আপার-কেস এবং লোয়ার-কেস অক্ষরের মধ্যে পার্থক্য করে না, তাই আপনি Aযদি নামের একটি ফোল্ডার তৈরি করতে পারবেন না যদি aইতিমধ্যে একটি নামের উপস্থিত থাকে। রীতিমত ভয়াবহ, আপাতদৃষ্টিতে-allowed নাম পছন্দ PRNএবং CON, এবং অনেক অন্যদের সংরক্ষিত হয় এবং মঞ্জুরি নেই। উইন্ডোজ এছাড়াও বিভিন্ন দৈর্ঘ্য বিধিনিষেধ আছে; অন্য ফোল্ডারে সরানো থাকলে একটি ফোল্ডারে বৈধ ফাইলের নামটি অবৈধ হতে পারে। ফাইল এবং ফোল্ডার নামকরণের নিয়মগুলি মাইক্রোসফ্ট ডক্সে রয়েছে।

আপনি, সাধারণভাবে উইন্ডোজ ডিরেক্টরিগুলির নাম তৈরি করতে ব্যবহারকারীর দ্বারা উত্পাদিত পাঠ্যটি ব্যবহার করতে পারবেন না। তোমার নাম কিছু তারা চান ব্যবহারকারীদের অনুমতি দিতে চান, তাহলে আপনি মত নিরাপদ নাম তৈরি করতে A, AB, A2এট আল।, দোকান ব্যবহারকারীর তৈরি নাম এবং একটি অ্যাপ্লিকেশন ডেটা ফাইল তাদের পথ সমতুল, এবং আপনার অ্যাপ্লিকেশনের মধ্যে পাথ ম্যাপিং সঞ্চালন।

যদি আপনাকে অবশ্যই ব্যবহারকারী-উত্পন্ন ফোল্ডার নামগুলি মঞ্জুর করতেই পারে তবে সেগুলি অবৈধ কিনা তা বলার একমাত্র উপায় ব্যতিক্রমগুলি ধরা এবং নামটি অবৈধ ume এমনকি এটি বিপদ পূর্ণ, যেমন অস্বীকৃত অ্যাক্সেস, অফলাইন ড্রাইভ এবং অকার্যকর নামগুলির জন্য নিক্ষিপ্ত হতে পারে এমনগুলির সাথে ড্রাইভ স্পেসের ওভারল্যাপের বাইরে ফেলে দেওয়া ব্যতিক্রমগুলি। আপনি আঘাতের এক বিশাল ক্যান খুলছেন।


11
এমএসডিএন লিঙ্কের মূল বাক্যাংশটি হ'ল "[এবং একটি] নয় এমন অন্যান্য অক্ষর যা টার্গেট ফাইল সিস্টেম মঞ্জুরি দেয় না"। উইন্ডোজে বিভিন্ন ফাইল সিস্টেম থাকতে পারে। কিছু ইউনিকোড অনুমতি দিতে পারে, অন্যদের না পারে। সাধারণভাবে, নামটি বৈধ করার একমাত্র নিরাপদ উপায় হ'ল এটির লক্ষ্য ডিভাইসে চেষ্টা করা।
অ্যাড্রিয়ান ম্যাকার্থি 19

72
কিছু গাইডলাইন রয়েছে, এবং "কেবলমাত্র বৈধ অক্ষর দ্বারা রচিত অসীম সংখ্যা রয়েছে যা নিষিদ্ধ" গঠনমূলক নয়। তেমনি "উইন্ডোজ আপার-কেস এবং লোয়ার-কেস চরিত্রগুলির মধ্যে পার্থক্য করে না" একটি মূর্খ ব্যতিক্রম - ওপি সিনট্যাক্স সম্পর্কে জিজ্ঞাসা করছে এবং শব্দার্থ নয়, এবং কোনও সঠিক-মনের লোকেরা বলতে পারে না যে ফাইলটির নামটি অকার্যকরA.txt ছিল কারণ এটি উপস্থিত থাকতে পারে। a.TXT
বোরোডিন

9
COPY CON PRNমানে কীবোর্ড ইনপুট, বা সম্ভাব্য স্টিডিন থেকে পড়া এবং প্রিন্টার ডিভাইসে এটি অনুলিপি করা। এটি এখনও আধুনিক উইন্ডোজগুলিতে বৈধ কিনা তা নিশ্চিত নয়, তবে অবশ্যই এটি দীর্ঘ সময়ের জন্য ছিল। পুরানো দিনগুলিতে আপনি এটি পাঠ্য টাইপ করতে ব্যবহার করতে পারেন এবং ডট-ম্যাট্রিক্স প্রিন্টারটি কেবল আউটপুট করতে পারেন।
আন্তনপিটেক

6
"গঠনমূলক নয়" - বিপরীতে, এটি একটি সত্য। যা গঠনমূলক নয় তা হ'ল বোরোডিনের দ্বন্দ্ব।
জিম বাল্টার

3
"আপনি সাধারণভাবে উইন্ডোজ ডিরেক্টরিগুলির নাম তৈরি করতে ব্যবহারকারীর দ্বারা উত্পন্ন পাঠ্য ব্যবহার করতে পারবেন না।" <- আপনি যদি এটি করতে চান তবে আপনার কেবল একটি চরিত্রের শ্বেত তালিকা থাকতে পারে এবং এটি ইতিমধ্যে কাজ করতে পারে, যদি আপনি ইতিমধ্যে বিদ্যমান সমস্যাটিকে উপেক্ষা করতে পারেন।
কেসি

531

আসুন প্রথমে এটি সহজ রাখা এবং প্রশ্নের উত্তর দিন।

  1. নিষিদ্ধ মুদ্রণযোগ্য ASCII অক্ষরগুলি হ'ল :

    • লিনাক্স / ইউনিক্স:

      / (forward slash)
      
    • উইন্ডোজ:

      < (less than)
      > (greater than)
      : (colon - sometimes works, but is actually NTFS Alternate Data Streams)
      " (double quote)
      / (forward slash)
      \ (backslash)
      | (vertical bar or pipe)
      ? (question mark)
      * (asterisk)
      
  2. মুদ্রণযোগ্য অক্ষর

    যদি আপনার ডেটা এমন উত্স থেকে আসে যা মুদ্রণযোগ্য অক্ষরগুলিকে অনুমতি দেয় তবে তার জন্য আরও অনেক কিছু পরীক্ষা করা উচিত।

    • লিনাক্স / ইউনিক্স:

      0 (NULL byte)
      
    • উইন্ডোজ:

      0-31 (ASCII control characters)
      

    দ্রষ্টব্য: লিনাক্স / ইউনিক্স ফাইল সিস্টেমের অধীনে ফাইলনামে নিয়ন্ত্রণ অক্ষর সহ ফাইলগুলি তৈরি করা আইনী হলেও এই জাতীয় ফাইলগুলি ব্যবহার করা ব্যবহারকারীদের জন্য দুঃস্বপ্ন হতে পারে

  3. সংরক্ষিত ফাইলের নাম

    নিম্নলিখিত ফাইলের নামগুলি সংরক্ষিত আছে:

    • উইন্ডোজ:

      CON, PRN, AUX, NUL 
      COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9
      LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9
      

      (উভয় তাদের নিজস্ব এবং যথেচ্ছ ফাইল এক্সটেনশান সহ, যেমন LPT1.txt)।

  4. অন্যান্য বিধি

    • উইন্ডোজ:

      ফাইলের নামগুলি কোনও স্থান বা বিন্দুতে শেষ হতে পারে না।


5
বেশিরভাগ উইন্ডোজ ফাইল সিস্টেমগুলি 8-বিট অক্ষরের মধ্যে সীমাবদ্ধ নয়। আরও অনেক 8-বিট অক্ষর রয়েছে (NUL, নিয়ন্ত্রণ অক্ষর) যা উইন্ডোজটিতে নিষিদ্ধ। এমনকি সেগুলি বিবেচনা করেও প্রশ্নকর্তাকে "ফাইল সিস্টেমে একটি ডিরেক্টরি তৈরি করার অনুমতি দেয় না" কারণ তিনি জিজ্ঞাসা করেছিলেন যে অ-নিষিদ্ধ ডিরেক্টরিগুলির নাম অসীম ডিরেক্টরি রয়েছে।
ডোর হাই আর্চ

38
অন্যরা বলেছেন যে ইতিমধ্যে এবং এটি গঠনমূলক নয়। যখন আমি এখানে একটি উত্তর খুঁজতে গিয়েছিলাম তখন আমি অন্য যে কোনও জায়গায় জড়ো হওয়া তালিকাটি চেয়েছিলাম: বৈধ ফাইলনেমে একটি ভাল প্রচেষ্টা করার সময় কোন অক্ষরটি ব্যবহারকারী-ইনপুট থেকে ফিল্টার করতে হয়। অক্ষরগুলি যদি একসাথে অবৈধ হয়ে যায় তবে এগুলির জন্য কিছু বিস্তৃততার প্রয়োজন হতে পারে।
ক্রিস্টোফার ওয়েজব্যাক

5
একটি NULL অক্ষর লিনাক্সেও নিষিদ্ধ।
ড্যান জোনস

3
লিনাক্সে নিউলাইনগুলি নিষিদ্ধ নয়। আমি যুক্তি দিয়েছিলাম যে তাদের হওয়া উচিত, যদিও ... এবং যদি লিনাক্সে এনএলইউ নিষিদ্ধ করা হয় তবে এটি উইন্ডোজে নিষিদ্ধ, এটি একই উদ্দেশ্য পূরণ করে।
Alcaro

11
@ সোয়াকু: অবশ্যই না, যেহেতু বিশ্ব মাইক্রোসফ্টের চারদিকে ঘোরে না। নিষিদ্ধ করার জন্য একেবারে প্রয়োজনীয় এমন দুটি চরিত্রই কেন অপ্রয়োজনীয় বিধিনিষেধ যুক্ত করবেন?
ফায়ারগুরাফিকু

67

লিনাক্স এবং অন্যান্য ইউনিক্স-সম্পর্কিত সিস্টেমের অধীনে কেবলমাত্র দুটি অক্ষর রয়েছে যা কোনও ফাইল বা ডিরেক্টরির নামে উপস্থিত হতে পারে না এবং সেগুলি হল NUL '\0'এবং স্ল্যাশ '/'। স্ল্যাশ, অবশ্যই, ডিরেক্টরি উপাদানগুলি পৃথক করে একটি পাথ নামে উপস্থিত হতে পারে।

গুজব 1 এটা আছে যে স্টিভেন বোর্ন ( 'শেল' খ্যাতির) 254 ফাইল, প্রতি একক অক্ষর (চরিত্র কোড) যে একটি ফাইলের নাম প্রদর্শিত করতে এক (ব্যতীত ধারণকারী একটি ডিরেক্টরি ছিল /, '\0'; নাম .অবশ্যই, বর্তমান ডিরেক্টরী ছিল )। এটি বোর্ন শেলটি পরীক্ষা করতে এবং নিয়মিত ব্যাকআপ প্রোগ্রামগুলির মতো অযত্নমূলক প্রোগ্রামগুলির উপর সর্বনাশ ঘটিয়েছিল was

অন্যান্য ব্যক্তিরা উইন্ডোজ বিধিগুলি আবৃত করেছেন covered

মনে রাখবেন যে ম্যাকোস এক্স-এর একটি কেস-সংবেদনশীল ফাইল সিস্টেম রয়েছে।


1 এটি প্রোগ্রামিং অনুশীলনে কার্নিহান এবং পাইক ছিলেন যিনি Chapter অধ্যায়, টেস্টিং, .5 ,. St স্ট্রেস টেস্টে যতটা বলেছেন:

স্টিভ বোর্ন যখন তার ইউনিক্স শেলটি লিখেছিলেন (যা বোর্ন শেল হিসাবে পরিচিতি পেয়েছিল), তিনি 254 ফাইলের একটি ডিরেক্টরি দিয়ে একটি অক্ষর নাম রেখেছিলেন, প্রতিটি বাইট মানের জন্য একটি '\0'এবং স্ল্যাশ ছাড়া , দুটি অক্ষর যা ইউনিক্সে উপস্থিত হতে পারে না ফাইলের নাম। তিনি সেই ডিরেক্টরিটি প্যাটার্ন-ম্যাচিং এবং টোকেনাইজেশনের সমস্ত ধরণের পরীক্ষার জন্য ব্যবহার করেছিলেন। (পরীক্ষার ডিরেক্টরি অবশ্যই একটি প্রোগ্রাম দ্বারা তৈরি করা হয়েছিল)) বছরের পর বছর ধরে, সেই ডিরেক্টরিটি ফাইল-ট্রি-ওয়াকিং প্রোগ্রামগুলির নিষিদ্ধ ছিল; এটি তাদের ধ্বংসের পরীক্ষা করেছিল।

নোট করুন যে ডিরেক্টরিটিতে অবশ্যই অবশ্যই প্রবেশিকা থাকতে হবে .এবং ..তাই এটি 254 ফাইলের পরিবর্তে 253 ফাইল (এবং 2 ডিরেক্টরি) বা 255 নামের এন্ট্রি যুক্ত ছিল। এটি উপাখ্যানের কার্যকারিতা বা এটি বর্ণিত সতর্কতার সাথে প্রভাব ফেলবে না।


1
254 ফাইল? এবং ইউটিএফ 8 সম্পর্কে কী?
j_kubik

20
254 ফাইলগুলি সমস্ত সিঙ্গল-চরিত্রের ফাইলের নাম ছিল, প্রতিটি চরিত্রের জন্য একটি যা ফাইলের নামেই অনুমোদিত ছিল। স্টিভ বোর্ন বোর্ন শেলটি লেখার সময় ইউটিএফ -8 চোখের পিছনেও জ্বলছিল না। ইউটিএফ -8 বাইটের বৈধ ক্রমগুলি সম্পর্কে বিধিগুলি আরোপ করে (এবং বাইটস 0xC0, 0xC1, 0xF5-0xFF পুরোপুরি অস্বীকার করে)। অন্যথায়, এটি খুব আলাদা নয় - আমি বিস্তারিত স্তরের আলোচনা করছি।
জোনাথন লেফলার

1
MacOS এইচএফএস + ফাইল সিস্টেমগুলির জন্য অন ডিস্ক ডিরেক্টরি বিভাজকটি আসলে '/' এর পরিবর্তে ':'। আপনি যখন * নিক্স এপিআইয়ের সাথে কাজ করছেন তখন OS সাধারণত (সম্ভবত সর্বদা) সঠিক কাজ করে। তবে আপনি যদি ওএসএক্স ওয়ার্ল্ডে যান, যেমন অ্যাপলস্ক্রিপ্ট সহ এটি নির্ভরযোগ্যভাবে ঘটবে বলে আশা করবেন না। দেখে মনে হচ্ছে সম্ভবত কোকো এপিআইগুলি / এবং লুকিয়ে রাখে: আপনার কাছ থেকেও, তবে আমি নিশ্চিত যে পুরানো কার্বন এপিআইগুলি তা না করে।
ড্যান প্রিটস

@ ড্যানপ্রিটস আমি এক্সকোডের পছন্দগুলিতে একটি কাস্টম ফন্ট / রঙের স্কিম তৈরি করেছি, নামটির সাথে নাম দিয়েছি /। যে কিছু বিষয়, সৃষ্ট যেমন মধ্যে স্কিম সঙ্গে একটি নতুন ডিরেক্টরিটি নির্মিত হত।
আন্দ্রিয়াস

নোট করুন যে কোনও ডিরেক্টরিতে যদি তার নামে একটি কোলন থাকে তবে আপনি ডিরেক্টরিটি ইউনিক্স PATHভেরিয়েবলের সাথে যুক্ত করতে পারবেন না কারণ কোলনটি বিভাজক হিসাবে ব্যবহৃত হয় (উইন্ডোজে অর্ধিকোলন)। সুতরাং, এই জাতীয় ডিরেক্টরিতে প্রোগ্রামগুলি অবশ্যই এমন একটি পথের নাম দিয়ে চলতে হবে যা এটি নির্দিষ্ট করে যেখানে এটি (আপেক্ষিক বা পরম হতে পারে), অথবা আপনাকে অবশ্যই ডিরেক্টরিতে থাকতে হবে এবং এতে বিন্দু ( ., বর্তমান ডিরেক্টরি) থাকতে হবে PATH, যা ব্যাপকভাবে বিবেচিত একটি অনিরাপদ
জোনাথন লেফলার 15

36

অক্ষরগুলির একটি কালো তালিকা তৈরির পরিবর্তে, আপনি একটি শ্বেতলিস্ট ব্যবহার করতে পারেন । সমস্ত বিষয় বিবেচনা করা হয়, কোনও ফাইল বা ডিরেক্টরি নাম প্রসঙ্গে যে অক্ষরের পরিসর বোঝায় তা বেশ ছোট এবং আপনার নামকরণের কিছু নির্দিষ্ট প্রয়োজনীয়তা না থাকলে আপনার ব্যবহারকারীরা পুরো এএসসিআইআই টেবিলটি ব্যবহার না করতে পারলে এটি আপনার আবেদনের বিরুদ্ধে রাখবে না।

এটি টার্গেট ফাইল সিস্টেমে সংরক্ষিত নামের সমস্যা সমাধান করে না, তবে একটি শ্বেতলিস্টের সাহায্যে উত্সের ঝুঁকিগুলি হ্রাস করা আরও সহজ।

এই আত্মায়, এটি অক্ষরের একটি পরিসীমা যা নিরাপদ হিসাবে বিবেচনা করা যেতে পারে:

  • চিঠিগুলি (এজেড এজেড) - ইউনিকোডের অক্ষরগুলিও প্রয়োজন অনুসারে
  • সংখ্যা (0-9)
  • অ্যান্ডস্কোর (_)
  • হাইফেন (-)
  • স্থান
  • বিন্দু (।)

এবং যে কোনও অতিরিক্ত সুরক্ষিত অক্ষর আপনি মঞ্জুর করতে চান। এর বাইরে, আপনাকে কেবল ফাঁকা স্থান এবং বিন্দু সংক্রান্ত কিছু অতিরিক্ত নিয়ম প্রয়োগ করতে হবে । এটি সাধারণত পর্যাপ্ত:

  • নামটিতে কমপক্ষে একটি বর্ণ বা নম্বর থাকতে হবে (কেবল বিন্দু / স্পেস এড়াতে)
  • নাম অবশ্যই একটি বর্ণ বা সংখ্যা দিয়ে শুরু করা উচিত (শীর্ষস্থানীয় বিন্দু / স্পেস এড়াতে)
  • নাম কোনও বিন্দু বা স্পেস দিয়ে শেষ হবে না (এক্সপ্লোরারের মতো এটি উপস্থিত থাকলে কেবল ছাঁটাই করুন)

এটি ইতিমধ্যে বেশ জটিল এবং অযৌক্তিক নামের অনুমতি দেয়। উদাহরণস্বরূপ, এই নামগুলি এই নিয়মগুলির সাহায্যে সম্ভব হবে এবং উইন্ডোজ / লিনাক্সে বৈধ ফাইলের নাম হতে পারে:

  • A...........ext
  • B -.- .ext

সংক্ষেপে, এমনকি খুব কম শ্বেত তালিকাভুক্ত অক্ষর থাকা সত্ত্বেও আপনার এখনও সিদ্ধান্ত নেওয়া উচিত যে আসলে কী বোঝায়। আমার একটি অ্যাপ্লিকেশনটিতে, আমি উপরের মতো একই নিয়মগুলি ব্যবহার করেছি তবে কোনও নকল বিন্দু এবং ফাঁকা জায়গা ছিনিয়ে নিয়েছি।


15
এবং আমার অ-ইংরাজী-স্পিকার ব্যবহারকারীদের সম্পর্কে কী, যারা এগুলি দ্বারা বিভ্রান্ত হবে?
pkh

2
@ পিপিএইচ: আমি আমার পোস্টে যেমন উল্লেখ করেছি, আপনি আপনার শ্বেত তালিকায় কোনও প্রয়োজনীয় ইউনিকোড অক্ষর অন্তর্ভুক্ত করবেন। অক্ষরের ব্যাপ্তি সাধারণত খুব সহজেই নির্দিষ্ট করা যায়, বিশেষত যদি আপনি উদাহরণস্বরূপ নিয়মিত অভিব্যক্তি ব্যবহার করেন।
অয়নঅফটাইম

2
আমরা একটি শ্বেতলিস্ট পদ্ধতির ব্যবহার করি তবে উইন্ডোজটিতে ভুলে যাবেন না যে আপনি সংরক্ষিত, কেস-স্বতন্ত্র স্ট্রিংগুলি যেমন ডিভাইসের নাম (prn, lpt1, con) এবং। এবং ..
tahoar

2
আপনি উইন্ডোজ সীমাবদ্ধতাটি মিস করেছেন: ডট বা স্পেসে অবশ্যই শেষ হবে না।
মার্টিন বোনার মনিকাকে

1
"বিবেচিত সমস্ত বিষয়, একটি ফাইল বা ডিরেক্টরি নাম প্রসঙ্গে যে অক্ষরের পরিসর বোঝায় তা বেশ ছোট" " কিছু ব্যবহার ক্ষেত্রে হতে পারে। আমি এখন ২০ টি ভাষায় মিডিয়া ফাইল যুক্ত একটি প্রকল্পে কাজ করছি এবং ফাইলের নামগুলি মিডিয়া আইটেমের শিরোনাম প্রতিফলিত করা দরকার কারণ শেষ ব্যবহারকারীরা সেইভাবে সামগ্রীটি সন্ধান করবে। নামগুলির মধ্যে অনেকগুলি বিরামচিহ্ন ব্যবহার করে। ফাইলনাম অক্ষরের উপর যে কোনও বিধিনিষেধের দাম রয়েছে, তাই এই ক্ষেত্রে আমাদের সীমাবদ্ধতা হ্রাস করতে হবে। এই ব্যবহার ক্ষেত্রে, কিছু অক্ষর আছে যা পরিসীমা না একটি ফাইল মধ্যে জানার জন্য এ পর্যন্ত খাটো করতে পারে এমন চেয়ে সহজ।
লার্শ

29

উইন্ডোজটি আপনাকে উত্তরটি জানার সহজ উপায় হ'ল এক্সপ্লোরারের মাধ্যমে কোনও ফাইলের নাম পরিবর্তন করার চেষ্টা করা এবং নতুন নামের জন্য টাইপ করুন। উইন্ডোজ আপনাকে একটি অবৈধ চরিত্রের তালিকা বলে একটি বার্তা বাক্স পপআপ করবে।

A filename cannot contain any of the following characters:
    \ / : * ? " < > | 

https://support.microsoft.com/en-us/kb/177506


28

ঠিক আছে, যদি কেবল গবেষণার উদ্দেশ্যে হয় তবে আপনার সেরা বেটটি ফাইল নামগুলিতে এই উইকিপিডিয়া এন্ট্রিটি দেখানো

আপনি যদি ব্যবহারকারী ইনপুটকে বৈধতা দিতে এবং তার ভিত্তিতে ফাইলের নাম তৈরি করতে পোর্টেবল ফাংশন লিখতে চান তবে সংক্ষিপ্ত উত্তরটি নয় । পার্লের ফাইল :: স্পোর্টের মতো পোর্টেবল মডিউলটি একবার দেখুন এমন একটি "সাধারণ" টাস্ক সম্পাদন করার জন্য প্রয়োজনীয় সমস্ত কপিগুলিকে এক ঝলক দেখার জন্য ।


5

উইন্ডোজের জন্য আপনি পাওয়ারশেল ব্যবহার করে এটি পরীক্ষা করতে পারেন

$PathInvalidChars = [System.IO.Path]::GetInvalidPathChars() #36 chars

ইউটিএফ -8 কোডগুলি প্রদর্শন করতে আপনি রূপান্তর করতে পারেন

$enc = [system.Text.Encoding]::UTF8
$PathInvalidChars | foreach { $enc.GetBytes($_) }

$FileNameInvalidChars = [System.IO.Path]::GetInvalidFileNameChars() #41 chars

$FileOnlyInvalidChars = @(':', '*', '?', '\', '/') #5 chars - as a difference

যারা পাওয়ারশেলআই কথা বলেন না, তাদের জন্য N ফাইলনামআইনুডিয়ালচার্স 0x1F এর মাধ্যমে 0x00 এবং এবং: "<> | *? \ /
রবিন ডেভিস

4

উইন্ডোজ 10 (2019) এ, নীচের অক্ষরগুলি টাইপ করার চেষ্টা করার সময় একটি ত্রুটি দ্বারা নিষিদ্ধ করা হয়েছে:

একটি ফাইলের নামের মধ্যে নিম্নলিখিত বর্ণগুলির একটি থাকতে পারে:

\ / : * ? " < > |


3

এর ভিত্তিতে উইন্ডোগুলির জন্য এসি # বাস্তবায়ন ক্রিস্টোফার ওয়েজবিকের উত্তরের

এটি ফোল্ডার বুলিয়ান ধারণাগুলি দ্বারা আরও জটিল করে তুলেছিল তবে আশা করা যায় যে সমস্ত কিছু coversেকে রাখে

/// <summary>
/// This will replace invalid chars with underscores, there are also some reserved words that it adds underscore to
/// </summary>
/// <remarks>
/// /programming/1976007/what-characters-are-forbidden-in-windows-and-linux-directory-names
/// </remarks>
/// <param name="containsFolder">Pass in true if filename represents a folder\file (passing true will allow slash)</param>
public static string EscapeFilename_Windows(string filename, bool containsFolder = false)
{
    StringBuilder builder = new StringBuilder(filename.Length + 12);

    int index = 0;

    // Allow colon if it's part of the drive letter
    if (containsFolder)
    {
        Match match = Regex.Match(filename, @"^\s*[A-Z]:\\", RegexOptions.IgnoreCase);
        if (match.Success)
        {
            builder.Append(match.Value);
            index = match.Length;
        }
    }

    // Character substitutions
    for (int cntr = index; cntr < filename.Length; cntr++)
    {
        char c = filename[cntr];

        switch (c)
        {
            case '\u0000':
            case '\u0001':
            case '\u0002':
            case '\u0003':
            case '\u0004':
            case '\u0005':
            case '\u0006':
            case '\u0007':
            case '\u0008':
            case '\u0009':
            case '\u000A':
            case '\u000B':
            case '\u000C':
            case '\u000D':
            case '\u000E':
            case '\u000F':
            case '\u0010':
            case '\u0011':
            case '\u0012':
            case '\u0013':
            case '\u0014':
            case '\u0015':
            case '\u0016':
            case '\u0017':
            case '\u0018':
            case '\u0019':
            case '\u001A':
            case '\u001B':
            case '\u001C':
            case '\u001D':
            case '\u001E':
            case '\u001F':

            case '<':
            case '>':
            case ':':
            case '"':
            case '/':
            case '|':
            case '?':
            case '*':
                builder.Append('_');
                break;

            case '\\':
                builder.Append(containsFolder ? c : '_');
                break;

            default:
                builder.Append(c);
                break;
        }
    }

    string built = builder.ToString();

    if (built == "")
    {
        return "_";
    }

    if (built.EndsWith(" ") || built.EndsWith("."))
    {
        built = built.Substring(0, built.Length - 1) + "_";
    }

    // These are reserved names, in either the folder or file name, but they are fine if following a dot
    // CON, PRN, AUX, NUL, COM0 .. COM9, LPT0 .. LPT9
    builder = new StringBuilder(built.Length + 12);
    index = 0;
    foreach (Match match in Regex.Matches(built, @"(^|\\)\s*(?<bad>CON|PRN|AUX|NUL|COM\d|LPT\d)\s*(\.|\\|$)", RegexOptions.IgnoreCase))
    {
        Group group = match.Groups["bad"];
        if (group.Index > index)
        {
            builder.Append(built.Substring(index, match.Index - index + 1));
        }

        builder.Append(group.Value);
        builder.Append("_");        // putting an underscore after this keyword is enough to make it acceptable

        index = group.Index + group.Length;
    }

    if (index == 0)
    {
        return built;
    }

    if (index < built.Length - 1)
    {
        builder.Append(built.Substring(index));
    }

    return builder.ToString();
}

আমার তিনটি প্রশ্ন রয়েছে: 1. আপনি কেন StringBuilderপ্রাথমিক সামর্থ্যের সাথে প্রাথমিকভাবে শুরু করলেন ? ২. আপনি কেন দৈর্ঘ্যের সাথে 12 যোগ করলেন filename? ৩. নির্বিচারে 12 জনকে বেছে নেওয়া হয়েছিল নাকি এই সংখ্যাটির পিছনে কিছু চিন্তাভাবনা ছিল?
iiminov

2

18/04/2017 পর্যন্ত, এই বিষয়ের উত্তরের মধ্যে অক্ষর এবং ফাইলের নামের কোনও সাধারণ কালো বা সাদা তালিকা স্পষ্ট নয় - এবং এর অনেকগুলি জবাব রয়েছে।

আমি যে সেরা পরামর্শটি সামনে আসতে পারি তা হ'ল ব্যবহারকারীকে তার পছন্দ মতো ফাইলটির নাম দেওয়া। অ্যাপ্লিকেশনটি ফাইলটি সংরক্ষণ করার চেষ্টা করার সময় কোনও ত্রুটি হ্যান্ডলার ব্যবহার করে, কোনও ব্যতিক্রম ধরা, ফাইলনামটি দোষের জন্য ধরে নেওয়া (অবশ্যই সেভের পথটি ঠিক আছে কিনা তা নিশ্চিত করার পরে) এবং ব্যবহারকারীকে একটি নতুন ফাইলের নামের জন্য অনুরোধ করা উচিত। সেরা ফলাফলের জন্য, এই চেকিং পদ্ধতিটি একটি লুপের মধ্যে রাখুন যা ব্যবহারকারী এটি সঠিকভাবে না পায় বা হাল ছেড়ে না দেওয়া অবধি চলতে থাকে। আমার পক্ষে সবচেয়ে ভাল কাজ করেছেন (কমপক্ষে ভিবিএতে)।


1
আপনার উত্তর @ ফেস্টাস্ট্রো প্রযুক্তিগত দৃষ্টিকোণ থেকে সঠিক। তবে ইউএক্স দৃষ্টিকোণ থেকে এটি একটি দুঃস্বপ্ন - ব্যবহারকারী "কিছু টাইপ করতে খেলতে বাধ্য হন এবং আমি আপনাকে বলি যে আপনি সফল হন কিনা" গেমটি বারবার বলি। আমি বরং বার্তাটি (সতর্কতা শৈলী) দেখতে পাচ্ছি যা ব্যবহারকারীকে বলছে যে তারা একটি অবৈধ চরিত্র প্রবেশ করেছে যা পরে রূপান্তরিত হবে।
মাইক

ক্রিস্টোফার ওজেব্যাক 2015 সালে এমন একটি কালো তালিকা সরবরাহ করেছিলেন
জিম

1

যদিও একমাত্র অবৈধ ইউনিক্স চরগুলি হতে পারে /এবং NULLযদিও কমান্ড লাইন ব্যাখ্যার জন্য কিছু বিবেচনা অন্তর্ভুক্ত করা উচিত।

উদাহরণস্বরূপ, যখন কোনও ফাইলের নাম দেওয়া বৈধ হতে পারে 1>&2বা2>&1 ইউনিক্সে কোনও কমান্ড লাইনে ব্যবহৃত হয় তখন ফাইলের নামগুলি ভুল ব্যাখ্যা করা যেতে পারে।

একইভাবে কোনও ফাইলের নাম দেওয়াও সম্ভব হতে পারে $PATHতবে কমান্ড লাইন থেকে এটি অ্যাক্সেস করার চেষ্টা করার পরে শেলটি $PATHতার পরিবর্তনশীল মানটিতে অনুবাদ করবে te


ব্যাশে লিটারেল জন্য, সবচেয়ে ভালো উপায় আমি লিটারেল ডিক্লেয়ার ছাড়া ক্ষেপক হয় পেয়েছি $'myvalueis': প্রাক্তন $ echo 'hi' > $'2>&1', cat 2\>\&1"হাই"
ThorSummoner

1

সংজ্ঞা সমস্যাসমূহ, কি বৈধ এবং সেটা ইতিমধ্যে adressed এবং whitelists প্রস্তাব করা হয়েছে । তবে উইন্ডোজ 8-বিট-এর চেয়ে বেশি অক্ষরকে সমর্থন করে। উইকিপিডিয়া জানিয়েছে , যে (উদাহরণস্বরূপ)

মোডিফায়ার লেটার কোলন [( নীচে দেখুন) দেখুন ) কখনও কখনও উইন্ডোজ ফাইলের নামগুলিতে ব্যবহৃত হয় কারণ এটি ফাইলের নামগুলির জন্য ব্যবহৃত সেগোই ইউআই ফন্টের কোলনের সাথে সমান । [উত্তরাধিকারসূত্রে প্রাপ্ত ASCII] কোলন নিজেই অনুমোদিত নয়।

সুতরাং, আমি ইউনিকোড অক্ষর ব্যবহার করে "অবৈধ "গুলির প্রতিস্থাপনের জন্য আরও অনেক উদার পদ্ধতির উপস্থাপন করতে চাই। আমি আমার তুলনামূলক ব্যবহারের ক্ষেত্রে ফলাফলটি আরও বেশি পাঠযোগ্য found এই ব্লক উদাহরণস্বরূপ দেখুন । এছাড়াও আপনি এটি থেকে মূল সামগ্রী পুনরুদ্ধার করতে পারেন। সম্ভাব্য পছন্দ এবং গবেষণা নিম্নলিখিত তালিকায় সরবরাহ করা হয়েছে:

  1. *( U+002A * ASTERISK) এর পরিবর্তে , আপনি তালিকাভুক্ত অনেকের মধ্যে একটি ব্যবহার করতে পারেন , উদাহরণস্বরূপ U+2217 ∗ (ASTERISK OPERATOR)বাFull Width Asterisk U+FF0A *
  2. বদলে ., আপনি একটি ব্যবহার করতে পারেন এই , উদাহরণস্বরূপ⋅ U+22C5 dot operator
  3. পরিবর্তে ", আপনি ব্যবহার করতে পারেন “ U+201C english leftdoublequotemark(বিকল্প দেখুন এখানে )
  4. /( / SOLIDUS U+002F) এর পরিবর্তে , আপনি ∕ DIVISION SLASH U+2215(অন্যদের এখানে ব্যবহার করতে পারেন) )
  5. বদলে \( \ U+005C Reverse solidus), আপনি ব্যবহার করতে পারেন ⧵ U+29F5 Reverse solidus operator( আরো )
  6. বদলে [( U+005B Left square bracket) এবং ]( U+005D Right square bracket), আপনি উদাহরণস্বরূপ ব্যবহার করতে পারেন U+FF3B[ FULLWIDTH LEFT SQUARE BRACKETএবং U+FF3D ]FULLWIDTH RIGHT SQUARE BRACKET(থেকে এখানে , আরো সম্ভাবনার এখানে )
  7. পরিবর্তে :, আপনি ফাইলের নামগুলির জন্য ব্যবহৃত সেগোই ইউআই ফন্টের কোলনের সাথে সমান হওয়ায় উইন্ডোজ ফাইলের নামগুলিতে কখনও কখনও উইন্ডোজ ফাইলের নাম ব্যবহার করে U+2236 ∶ RATIO (for mathematical usage)বা U+A789 ꞉ MODIFIER LETTER COLON( কোলন (চিঠি দেখুন) ব্যবহার করতে পারেন The কোলন নিজেই অনুমোদিত নয়) ( এখানে দেখুন )
  8. পরিবর্তে ;, আপনি ব্যবহার করতে পারেন U+037E ; GREEK QUESTION MARK( এখানে দেখুন) )
  9. জন্য |: সেখানে যেমন কিছু ভাল পরিপূরক হয় U+0964 । DEVANAGARI DANDA, U+2223 ∣ DIVIDESবা U+01C0 ǀ LATIN LETTER DENTAL CLICK( উইকিপিডিয়া )। এছাড়াও বক্স অক্ষর অঙ্কন অন্যান্য বিভিন্ন বিকল্প রয়েছে।
  10. ,( , U+002C COMMA) এর পরিবর্তে , আপনি উদাহরণস্বরূপ ব্যবহার করতে পারেন ‚ U+201A SINGLE LOW-9 QUOTATION MARK( এখানে দেখুন )
  11. জন্য ?( U+003F ? QUESTION MARK), এই ভাল প্রার্থীরা আছেন: U+FF1F ? FULLWIDTH QUESTION MARKবা U+FE56 ﹖ SMALL QUESTION MARK(থেকে তিনি পুনরায় দুই থেকে আরো বুদ্ধিহীন চরিত্রসমূহ ব্লক , "প্রশ্ন" এর জন্য অনুসন্ধান)

0

উইন্ডোজে ইন্টারনেট শর্টকাট তৈরি করার সময়, ফাইলের নাম তৈরি করার জন্য, এটি অবৈধ অক্ষরগুলি এড়িয়ে যায়, ফরওয়ার্ড স্ল্যাশ বাদ দিয়ে, যা বিয়োগে রূপান্তরিত হয়।


3
"কোনও উত্তর নয় ... প্রত্যাখ্যান করা হয়েছে - একজন মডারেটর আপনার পতাকাটি পর্যালোচনা করেছেন, তবে এটি সমর্থন করার জন্য কোনও প্রমাণ খুঁজে পান না"। আপনি আমাকে, মজা পেয়েছেন. ভাল মডারেটর, দয়া করে।
জিম বাল্টার

-1

ইউনিক্স শেলগুলিতে আপনি প্রায় প্রতিটি অক্ষরকে একক উদ্ধৃতিতে উদ্ধৃত করতে পারেন '। একক উদ্ধৃতি নিজেই ব্যতীত, এবং আপনি নিয়ন্ত্রণ অক্ষর প্রকাশ করতে পারবেন না, কারণ \প্রসারিত নয়। উদ্ধৃত স্ট্রিংয়ের মধ্যে থেকে একক উদ্ধৃতি নিজেই অ্যাক্সেস করা সম্ভব, কারণ আপনি একক এবং ডাবল উদ্ধৃতি দিয়ে স্ট্রিংগুলি সংহত করতে পারেন, 'I'"'"'m'যার মতো একটি ফাইল অ্যাক্সেস করতে ব্যবহার করা যেতে পারে "I'm"(ডাবল উদ্ধৃতিও এখানে সম্ভব)।

সুতরাং আপনার সমস্ত নিয়ন্ত্রণ অক্ষর এড়ানো উচিত, কারণ শেলটি প্রবেশ করা তাদের পক্ষে খুব কঠিন difficult বাকীটি এখনও মজাদার, বিশেষত ফাইলগুলি ড্যাশ দিয়ে শুরু হয়, কারণ বেশিরভাগ কমান্ডগুলি সেগুলি অপশন হিসাবে পড়বে যদি না আপনার --আগে দুটি ড্যাশ থাকে বা আপনি সেগুলি নির্দিষ্ট করে থাকেন ./যা শুরুটিও আড়াল করে -

আপনি যদি সুন্দর হতে চান তবে শেল এবং টিপিকাল কমান্ডগুলি সিনট্যাক্টিকাল উপাদান হিসাবে ব্যবহার করা কোনও অক্ষর ব্যবহার করবেন না, কখনও কখনও অবস্থান নির্ভর করে, যেমন আপনি এখনও ব্যবহার করতে পারেন -তবে প্রথম চরিত্র হিসাবে নয়; একই ., আপনি এটির অর্থ কেবল তখনই এটি প্রথম অক্ষর হিসাবে ব্যবহার করতে পারেন ("লুকানো ফাইল")। আপনি যখন গড় বলতে চাইছেন তখন আপনার ফাইলের নামগুলি ভিটি 100 এস্কেপ সিকোয়েন্সস ;-) হয়, যাতে কোনও এল আউটপুট গারবল করে।


প্রশ্ন শাঁস সম্পর্কে নয়।
জিম বাল্টার

-8

আমার একই চাহিদা ছিল এবং আমি সুপারিশ বা মানক রেফারেন্সগুলি খুঁজছিলাম এবং এই থ্রেডটি জুড়ে এসেছি। আমার বর্তমান অক্ষরগুলির কালো তালিকা যা ফাইল এবং ডিরেক্টরি নামগুলিতে এড়ানো উচিত:

$CharactersInvalidForFileName = {
    "pound" -> "#",
    "left angle bracket" -> "<",
    "dollar sign" -> "$",
    "plus sign" -> "+",
    "percent" -> "%",
    "right angle bracket" -> ">",
    "exclamation point" -> "!",
    "backtick" -> "`",
    "ampersand" -> "&",
    "asterisk" -> "*",
    "single quotes" -> "“",
    "pipe" -> "|",
    "left bracket" -> "{",
    "question mark" -> "?",
    "double quotes" -> "”",
    "equal sign" -> "=",
    "right bracket" -> "}",
    "forward slash" -> "/",
    "colon" -> ":",
    "back slash" -> "\\",
    "lank spaces" -> "b",
    "at sign" -> "@"
};

4
আপনি কি @তালিকায় থাকার বিষয়ে মন্তব্য করতে আপত্তি করবেন ?
পাইপব্রোস

8
প্রশ্নটি ছিল কোন চরিত্রগুলি অবৈধ। আপনার তালিকার বেশিরভাগ অক্ষর বৈধ।
নাইজেল অ্যাল্ডারটন

6
চিঠি b? হ্যাঁ, আমি ধরে নিই যে খ lank spaces... এটি এখনও কয়েকটা রেখে গেছে ... আমি একটি ছবিটির নাম (),-.;[]^_~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ.jpgপরিবর্তন করেছি তবে এটি আবার বদলাতে হয়েছিল কারণ এটি রাগান্বিত ছিল ...
ashleedawg
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.