উইন্ডোজ ফাইল পাথগুলিকে সাধারণ প্রতিস্থাপনের সাথে ইউনিক্স ফাইল পাথগুলিতে রূপান্তর করা নিরাপদ?


12

সুতরাং উদাহরণস্বরূপ বলুন আমার কাছে এটি ছিল যাতে আমার সমস্ত ফাইল উইন্ডো মেশিন থেকে কোনও ইউনিক্স মেশিনে স্থানান্তরিত হয়: C:\test\myFile.txtথেকে {somewhere}/test/myFile.txt(ড্রাইভ লেটার এই সময়ে অপ্রাসঙ্গিক)।

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

public String normalizePath(String path) {
   return path.replaceAll("\\", "/");
}

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


4
কেবল ফাঁকা জায়গাগুলি নজর রাখুন - ইউনিক্স ডিরেক্টরি নামের তুলনায় উইন্ডো ফোল্ডারের নামগুলিতে স্পেস স্থাপন অনেক বেশি সাধারণ। বিশেষত, "\ প্রোগ্রাম ফাইলগুলি" আমাকে সর্বদা পায়। আপনি কীভাবে পথগুলি ব্যবহার করছেন তার উপর নির্ভর করে আপনাকে "\" দিয়ে স্পেস ছেড়ে যেতে হতে পারে।
রব

1
সরলতার জন্য ডেলানান, আসুন চলক পাথগুলি বাদ দেওয়ার জন্য পথগুলির ব্যাপ্তি সীমাবদ্ধ করি।
এমএক্সএলডিভস

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

1
@ ডেলানান আমি মূলত একটি বৈধ পথ তৈরির দিকে দৃষ্টি নিবদ্ধ করছি, তবে এটি একটি ভাল বিষয়। আমি যে পথগুলিতে রূপান্তর করছি সেগুলি যথেষ্ট সহজ হওয়া উচিত যে সেগুলি নিজেরাই অর্থপূর্ণ।
এমএক্সএলডিভস

3
লিনাক্সের ফাইলনামগুলিতে ব্যাকস্ল্যাশগুলি অনুমোদিত, সুতরাং লিনাক্সের পথে ব্যাকস্ল্যাশগুলি প্রতিস্থাপনের ফলে অবৈধ ডিরেক্টরিগুলি যুক্ত হতে পারে। উদাহরণস্বরূপ, লিনাক্সের /foo\\barসমতুল্য নয় /foo/bar

উত্তর:


7

হ্যাঁ, আপনি যদি কেবল উইন্ডোজটিতে প্রতিস্থাপনটি করেন এবং অন্যান্য সিস্টেমে চলার সময় এটি বন্ধ করে দিন।

ইউনিক্সের মতো সিস্টেমে প্রতিস্থাপন করা ভুল কারণ কারণ ইউনিক্সের মতো প্ল্যাটফর্মে কোনও ফাইল বা ডিরেক্টরিতে নামের\ একটি বৈধ অক্ষর। এই প্ল্যাটফর্মে, শুধুমাত্র NULএবং /ফাইল এবং ডিরেক্টরির নাম নিষিদ্ধ করা হয়।

এছাড়াও, কিছু উইন্ডোজ এপিআই ফাংশন (বেশিরভাগ নীচের স্তরেরগুলি) ফরোয়ার্ড স্ল্যাশ ব্যবহার করতে দেয় না - তাদের সাথে ব্যাকস্ল্যাশগুলি অবশ্যই ব্যবহার করা উচিত


4

হ্যাঁ, তবে এই পুরো জিনিসটি একটি মূল বিষয়। জাভা বিরামবিহীনভাবে উইন্ডোজ-এর স্ল্যাশ ব্যাক স্ল্যাশে রূপান্তরিত করে। হার্ড-কোডড বা কনফিগারেশনে সংরক্ষিত সমস্ত পাথের জন্য আপনি কেবল ফরোয়ার্ড স্ল্যাশ ব্যবহার করতে পারেন এবং এটি উভয় প্ল্যাটফর্মের জন্য কাজ করবে।

ব্যক্তিগতভাবে, আমি সবসময় এমনকি Windows এ ফরোয়ার্ড স্ল্যাশ ব্যবহার কারণ এটি না এস্কেপ অক্ষর। কাঁচা পথটি কোডে থাকুক বা কোনও সম্পত্তি ফাইলে বহিরাগত হোক না কেন, আমি এটিকে একইভাবে এনকোড করেছি।

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

File f = new File("c:/some/path/file.txt");
if (!f.canRead()) {
  System.out.println("Uh oh, Snowman was wrong!");
}

বোনাস: আপনি এমনকি একই পথে স্ল্যাশ মিশ্রিত করতে পারেন !

File f = new File("c:/some\\path/file.txt");
if (!f.canRead()) {
  System.out.println("Uh oh, Snowman was wrong again!");
}

1
আপনি যদি আমার পুরো উত্তরটি পড়েন তবে আপনি দেখতে পাবেন যেখানে আমি বলেছি যে সর্বদা ইউনিক্স ফাইল বিভাজক ব্যবহার করে উভয় জায়গায় সঠিকভাবে কাজ করবে, কোনও রূপান্তর প্রয়োজন নেই।

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

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

আমার আগের মন্তব্য পড়ুন।

1
উইন্ডোজ ফোরার্ড এবং ব্যাকস্ল্যাশ উভয়কেই স্বীকৃতি দেয় এবং এমএস-ডস-এর প্রথম দিক থেকেই এটি ছিল। অর্থাৎ প্রতিটি মাইক্রোসফ্ট ওএস কার্নেলের কাছে ফরোয়ার্ড স্ল্যাশ বিভাজক সমর্থন রয়েছে। প্রাথমিক COMMAND.COMদোভাষীদের রান-টাইম অগ্রাধিকার ছিল: আপনি কোন কনফিগার করতে পারেন যে কোন অনুবাদক মুদ্রণ এবং বিশ্লেষণের জন্য ব্যবহৃত হবে sla
কাজ

3

উইন্ডোজের আরেকটি জটিলতা হ'ল এটি ইউএনসি স্বরলিপি পাশাপাশি ট্র্যাডিশনাল ড্রাইভ চিঠিগুলিকে সমর্থন করে।

রিমোট ফাইল সার্ভারে একটি ফাইল হিসাবে প্রবেশ করা যেতে পারে \\server\sharename\path\filename


1
আমি মনে করি এটি এখন পর্যন্ত উদ্ধৃত একমাত্র উদ্বেগ যা আসলে এই অ্যাপ্লিকেশনটির জন্য একটি সমস্যা। যদি ইউএনসি পাথগুলি জড়িত থাকে তবে সেগুলি ইউনিক্স-স্টাইলের পথে কার্যকরভাবে রূপান্তর করা যাবে না
জুলে

2

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

ইত্যাদি , ইত্যাদি , ইত্যাদি

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


1
আমি মনে করি না যে উদ্বেগ প্রকাশিত হয়েছে এই উদ্বেগগুলি প্রশ্নের জন্য বৈধ কিনা স্পেস হ্যান্ডলিংটি একটি ইউজার ইন্টারফেসের সমস্যা; ইউনিক্স সিস্টেম পারেন ফাইলের নামের মধ্যে শূণ্যস্থান শুধু সেইসাথে উইন্ডোজ করতে পারেন হ্যান্ডেল। উইন্ডোজ অবৈধ চরিত্রগুলি ইউনিক্সগুলির একটি সুপারস্টার। উইন্ডোজ ফাইলের নামগুলিতে কোনও কোনও ব্যাকস্ল্যাশ থাকতে পারে না (রূপান্তরিত হবে ডিরেক্টরি বিভাজক ব্যতীত)। এম্বেড থাকা জায়গাগুলির জন্য উদ্ধৃতি ব্যবহার করা একটি ব্যবহারকারী ইন্টারফেস স্তরের উদ্বেগ, কোনও ফাইল হ্যান্ডলিংয়ের সমস্যা নয়। রূপান্তর কোডটি স্পষ্টতই জাভাতে রয়েছে, সুতরাং স্বয়ংক্রিয়ভাবে UCS16-> UTF8 রূপান্তরটি পরিচালনা করা উচিত।
জুলে

-1

প্রতিটি মাইক্রোসফ্ট অপারেটিং সিস্টেম, এমএস-ডস দিয়ে শুরু করে, কার্নেল স্তরে, উভয় ফরোয়ার্ড স্ল্যাশ এবং ব্যাকস্ল্যাশ বোঝে ।

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

ডসের প্রাথমিক সংস্করণগুলিতে মাইক্রোসফ্টের command.comদোভাষী এটিকে একটি কনফিগারযোগ্য পছন্দ হিসাবে তৈরি করেছেন যা স্ল্যাশ পাথগুলি প্রদর্শন এবং বিশ্লেষণ করতে ব্যবহৃত হয়েছিল to শেষ পর্যন্ত তা সরানো হয়েছিল।

উইন্ডোজের কিছু ব্যবহারকারী-স্থান প্রোগ্রাম যেমন ওহ, উইন্ডোজ শেল ( explorer.exe) ফরোয়ার্ড স্ল্যাশ পছন্দ করে না। এই প্রোগ্রামগুলিতে এটি কেবল স্বল্প প্রোগ্রামিং।


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

@ জুলস ওপি উইন্ডোজ থেকে ফাইলগুলি স্থানান্তর করছে। এই উত্তরটি ব্যাখ্যা করে যে প্রতিস্থাপন করার মতো কোনও ব্যাকস্ল্যাশ নেই। এগুলি নিজেই উইন্ডোজ ফাইল সিস্টেমে নেই। সমস্ত পাথ ফরোয়ার্ড স্ল্যাশগুলির সাথে প্রকাশযোগ্য (এবং উইন্ডোজ এমনকি এটি বুঝতে পারে)।
কাজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.