آیا تا به حال نام فایل یا پوشهای را عوض کردهاید و نتیجه با چیزی که نوشته بودید فرق داشته باشد؟ چندی پیش، عنوان سندی را در کادر تغییر نام چسباندم و کلید Enter را زدم؛ اما نقطهٔ پایان عنوان ناگهان ناپدید شد. نه هشداری در کار بود و نه پیام خطایی؛ ویندوز بیهیچ توضیحی آن نویسه را حذف کرد.
البته این نخستین بار نبود که چنین اتفاقی میافتاد. این هم یکی از همان رفتارهای کوچک و عجیب ویندوز است که کمکم عادی به نظر میرسد؛ اما این بار نمیخواستم بیخیالش شوم. باید میفهمیدم چرا ویندوز مدام نقطه را حذف میکند و بیآنکه چیزی بگوید، نام پوشه را تغییر میدهد.
این یک ایراد گذرا نیست
البته فایلهای پسونددار استثنا هستند





اگر این فقط خطایی اتفاقی بود، میشد بهسادگی از کنارش گذشت. برای اینکه مطمئن شوم بار اول اشتباه تایپ نکردهام، عمداً آن را روی چند نوع فایل آزمودم؛ ویندوز هر بار که نقطه آخرین نویسهٔ نام بود، آن را حذف میکرد.
فایلهای پسونددار وضع متفاوتی داشتند. نامی مانند document.txt نقطه دارد، اما این نقطه نام فایل را از پسوندش جدا میکند و بنابراین در انتهای نام قرار نگرفته است. گمان میکردم پوشهها رفتار متفاوتی داشته باشند، اما اشتباه میکردم؛ ویندوز با پوشهها نیز همینگونه برخورد میکرد.
از اینجا به بعد، دیگر ماجرا شبیه ایرادی تصادفی نبود. ویندوز آشکارا از قاعدهای پیروی میکرد که هم فایلها و هم پوشهها را در بر میگرفت. نخستین حدس منطقی این بود که شاید سامانهٔ فایل ویندوز از نقطه در انتهای نام پشتیبانی نمیکند. این توضیح معقول به نظر میرسید، اما درست نبود.
در واقع NTFS هیچ مشکلی ندارد
بخش ذخیرهکنندهٔ فایلها اهمیتی به این موضوع نمیدهد

مستندات مایکروسافت دربارهٔ نامگذاری فایلها صریحاً به کاربران ویندوز توصیه میکند نام فایل یا پوشه را با فاصله یا نقطه به پایان نرسانند. بااینحال، همان مستندات یادآور میشوند که ممکن است سامانهٔ فایل از چنین نامهایی پشتیبانی کند، هرچند رابط کاربری ویندوز آنها را نپذیرد.
نکتهٔ شگفتانگیز همین بود. پس NTFS، یعنی سامانهای که واقعاً مسئول ذخیرهکردن فایلها روی درایو من است، هیچ مشکلی با نامی که به نقطه یا فاصله ختم شود ندارد.
بهسادگی میتوان تصور کرد که ویندوز فایلها را در قالب سامانهای یکپارچه مدیریت میکند، اما در واقع چندین لایه در این فرایند دخیلاند. برای نمونه، NTFS، exFAT و FAT32 همگی یکسان با فایلها برخورد نمیکنند و هریک قواعد خاص خود را دارند. بنابراین هر عاملی که نقطه را حذف میکرد، باید قاعدهای در یکی از مراحل پیش از ذخیرهشدن واقعی فایل میبود.
پس ویندوز هنوز از قواعدی بسیار قدیمی پیروی میکند
پای عادیسازی Win32 در میان است

پاسخ را باید در شیوهٔ کار برنامههای معمول ویندوز با مسیر فایلها جستوجو کرد. فایل اکسپلورر، نوتپد و بیشتر برنامههای روزمرهٔ ویندوز از رابطهای استاندارد مدیریت فایل این سیستمعامل، موسوم به Win32، بهره میبرند. این لایه میان برنامه و سامانهٔ فایل قرار میگیرد و پیش از برقراری ارتباط با سامانهٔ فایل، مسیرها را بر پایهٔ مجموعهای از قواعد پردازش میکند.
بر پایهٔ قواعد عادیسازی Win32، نقطه یا فاصلهای که در انتهای نام قرار گرفته باشد، چیزی تلقی میشود که نباید باقی بماند. به همین دلیل نقطهٔ من بیهیچ خطایی ناپدید شد؛ ویندوز پیش از پردازش نام، آن را بهاصطلاح پاکسازی کرده بود.
بخش عجیب ماجرا این است که چنین رفتاری در کنار سامانهٔ فایلی بسیار جدیدتر ادامه یافته است؛ سامانهای که لزوماً به این محدودیت نیازی ندارد. ویندوز از روزگار DOS بسیار دگرگون شده است؛ دورانی که نام فایلها باید از الگوی سختگیرانهٔ هشت نویسه برای نام و سه نویسه برای پسوند پیروی میکرد و جایی برای نقطهای در انتهای نام باقی نمیگذاشت.
با آنکه NTFS از نامهای بلند پشتیبانی میکند، ویندوز همچنان سامانهای قدیمیتر برای نامگذاری را با خود به دوش میکشد. این محدودیت یکی از معدود کارهایی است که ویندوز ۱۱ هنوز، بهدلیل پیشینهٔ تاریخی و ملاحظات سازگاری، اجازهٔ انجام آنها را نمیدهد.
نقطهٔ انتهای نام فایل من یکی از همان قواعدی بود که جلوی چشم همه پنهان ماندهاند. بااینحال، هنوز میخواستم پاسخ یک پرسش را بدانم: اگر سامانهٔ فایل از این نقطه پشتیبانی میکرد، آیا میشد ویندوز را واداشت آن را نگه دارد؟
ویندوز را وادار کردم نقطه را نگه دارد
دور زدن نگهبان با پیشوند \\?\





در هریک از نمونههای زیر، نقطهای که پیش از علامت نقلقول پایانی آمده، بخشی از فرمان است.
برای اینکه مطمئن شوم این رفتار از Win32 ناشی میشود، نه محدودیتهای NTFS، از Command Prompt و یک پیشوند ویژه برای مسیر استفاده کردم. این پیشوند به Windows میگوید درخواست را بیواسطه به NTFS بسپارد. فرمان من این بود: type nul > “\\?\C:\Important\sample\config.” این بار، Windows فایلی ساخت که نامش دقیقاً همان بود و نقطه پایانیاش دستنخورده باقی ماند. همین کافی بود تا روشن شود ذخیرهکردن نقطه پایانی ذاتاً ناممکن نیست.
سپس همین آزمایش را با ساخت یک پوشه و این فرمان تکرار کردم: mkdir “\\?\C:\Important\sample.”
باز هم پوشه با نقطهای کاملاً نمایان در انتهای نامش پدیدار شد؛ اما استفاده از آن داستان دیگری داشت. وقتی روی فایل دوبار کلیک کردم، File Explorer نزدیک به یک دقیقه از کار افتاد و سپس دوباره پاسخگو شد. با کلیک روی پوشه نیز خطای «مکان در دسترس نیست» ظاهر شد و با وجود اینکه پوشه درست همانجا دیده میشد، Windows اصرار داشت که چنین پوشهای وجود ندارد.
تغییر نام، حذف، بریدن و کپیکردن همگی به همین شکل شکست خوردند و Windows در هر بار تلاش، خطای «این مورد یافت نشد» را نشان داد. این توقف درست شبیه هنگکردنهای معمول File Explorer بود که گاهی بیهیچ دلیل مرتبطی از پاسخگویی سر باز میزند؛ با این تفاوت که این بار علت از پیش معلوم بود.
Windows پوشهای مرموز و خراب نساخته بود. من نامی ایجاد کرده بودم که NTFS میتوانست آن را ذخیره کند، اما سازوکار معمول مدیریت فایل در Windows برای کار بیدردسر با چنین نامی طراحی نشده بود.
سرانجام برای پاککردن آنچه ساخته بودم، ناچار شدم دوباره از همان مسیر ویژه استفاده کنم. برای فایل، این فرمان را به کار بردم:
del “\\?\C:\Important\sample\config.”
برای پوشه نیز از این فرمان استفاده کردم:
rmdir /s /q "\\?\C:\Important\sample."
چون نمیتوانستم از آن استفاده کنم یا بازش کنم، File Explorer عملاً آن را ناموجود میپنداشت؛ هرچند فایل و پوشه درست همانجا بودند.
چرا یک نقطه گمشده اهمیت دارد؟
این رفتار کجا دردسرساز میشود؟
شاید نقطهای در انتهای نام فایل موضوعی بیش از حد ناچیز به نظر برسد، اما همیشه این شما نیستید که نام فایلها را تایپ میکنید.
اسکریپتها، فایلهای خروجی برنامهها و متنهای جایگذاریشده همگی ممکن است بیآنکه کسی متوجه شود، نامهایی بسازند که به نقطه یا فاصله ختم میشوند؛ بهویژه با توجه به محدودیتهای کنونی Windows دربارهٔ نویسهها و طول مسیر که خودشان نیز کم دردسر نمیآفرینند.
اگر Windows خطایی نشان میداد و میگفت این نام مجاز نیست، متوجه مشکل میشدید و آن را تغییر میدادید. اما حذف بیسروصدای یک نویسه ماجرای دیگری است. فایل ساخته میشود و معمولاً تا زمانی که یکی از مراحل بعدی دیگر نتواند نام را تطبیق دهد، از ماجرا باخبر نمیشوید.
احتمالاً بیشتر ما هرگز با این وضعیت روبهرو نمیشویم یا نیازی نداریم نگرانش باشیم. پیشتر دیده بودم که Windows نقطهها را حذف میکند، اما چندان به آن نیندیشیده بودم. این بار اما همین رفتار کوچک را تا انتهای این هزارتو دنبال کردم و به قانونی رسیدم که از روزگاری پابرجاست که بیشتر ما هنوز رایانهای نداشتیم. در واقع هیچچیز خراب نیست؛ این فقط یک قاعدهٔ قدیمی برای حفظ سازگاری است که با وجود روی کار آمدن سامانههای فایل بسیار جدیدتر، همچنان دوام آورده است.
منبع: این مطلب ترجمه و بومیسازی مقالهای از MakeUseOf به قلم Isaac Akinleye است. مشاهده مقاله اصلی