প্রশ্নটি কেন এখনও সীমাবদ্ধতা বিদ্যমান? অবশ্যই আধুনিক উইন্ডোজ আরও MAX_PATHদীর্ঘ পথের জন্য পার্শ্ব বাড়িয়ে তুলতে পারে। কেন সীমাবদ্ধতা সরানো হয়নি?
- এটি অপসারণ করা যায় না কারণ উইন্ডোজ প্রতিশ্রুতি দিয়েছিল যে এটি কখনও পরিবর্তন হবে না।
এপিআই চুক্তির মাধ্যমে, উইন্ডোজ সমস্ত অ্যাপ্লিকেশনকে গ্যারান্টি দিয়েছিল যে স্ট্যান্ডার্ড ফাইল এপিআই কখনও 260অক্ষরের চেয়ে দীর্ঘ পথ ফেরায় না ।
নিম্নলিখিত সঠিক কোড বিবেচনা করুন :
WIN32_FIND_DATA findData;
FindFirstFile("C:\Contoso\*", ref findData);
উইন্ডোজ আমার প্রোগ্রামটিকে গ্যারান্টি দিয়েছিল যে এটি আমার WIN32_FIND_DATAকাঠামোকে বিশিষ্ট করবে:
WIN32_FIND_DATA {
DWORD dwFileAttributes;
FILETIME ftCreationTime;
FILETIME ftLastAccessTime;
FILETIME ftLastWriteTime;
//...
TCHAR cFileName[MAX_PATH];
//..
}
আমার অ্যাপ্লিকেশনটি ধ্রুবকের মান ঘোষণা করেনি MAX_PATH, উইন্ডোজ এপিআই করেছে। আমার অ্যাপ্লিকেশনটি সেই সংজ্ঞায়িত মানটি ব্যবহার করে।
আমার কাঠামোটি সঠিকভাবে সংজ্ঞায়িত হয়েছে, এবং কেবলমাত্র 592মোট বাইটগুলি বরাদ্দ করে । এর অর্থ হল যে আমি কেবলমাত্র এমন একটি ফাইল নাম গ্রহণ করতে সক্ষম যা 260অক্ষরের চেয়ে কম । উইন্ডোজ আমাকে প্রতিশ্রুতি দিয়েছিল যে আমি যদি আমার অ্যাপ্লিকেশনটি সঠিকভাবে লিখি তবে আমার অ্যাপ্লিকেশন ভবিষ্যতে কাজ চালিয়ে যাবে।
উইন্ডোজ যদি 260অক্ষরের চেয়ে বেশি ফাইলের মঞ্জুরি দেয় তবে আমার বিদ্যমান অ্যাপ্লিকেশনটি (যা সঠিক এপিআই সঠিকভাবে ব্যবহার করেছে) ব্যর্থ হবে।
মাইক্রোসফ্টকে MAX_PATHধ্রুবক পরিবর্তন করার জন্য যে কেউ ডাকছেন , তাদের প্রথমে নিশ্চিত হওয়া দরকার যে কোনও বিদ্যমান অ্যাপ্লিকেশন ব্যর্থ হয়। উদাহরণস্বরূপ, আমি এখনও একটি উইন্ডোজ অ্যাপ্লিকেশনটির মালিক এবং ব্যবহার করি যা উইন্ডোজ 3.11 এ চালানোর জন্য লেখা হয়েছিল। এটি এখনও 64৪-বিট উইন্ডোজ ১০ এ চলে That যা পিছনের সামঞ্জস্যতা আপনাকে দেয়।
মাইক্রোসফট করেনি পূর্ণ 32.768 পথ নাম ব্যবহার করার জন্য একটি উপায় তৈরি; তবে এটি করার জন্য তাদের একটি নতুন এপিআই চুক্তি তৈরি করতে হয়েছিল। একটির জন্য, ফাইলগুলি গণনা করতে আপনার শেল এপিআই ব্যবহার করা উচিত (হার্ড ড্রাইভ বা নেটওয়ার্ক শেয়ারে সমস্ত ফাইল বিদ্যমান নেই)।
তবে তাদের বিদ্যমান ব্যবহারকারীর অ্যাপ্লিকেশনগুলিও ভঙ্গ করতে হবে না। অ্যাপ্লিকেশনগুলির সিংহভাগ ফাইল কাজের জন্য শেল এপিআই ব্যবহার করে না । প্রত্যেকে কেবল একদিন কল করে FindFirstFile/ FindNextFileএবং কল করে।