نام پرونده (رایانه)
نام پرونده یا نام فایل (به انگلیسی: Filename) فرادادهای پیرامون یک پرونده است. این فراداده، بهمنظور شناسایی یک پرونده در میان سایر پروندههای موجود در سیستم بهکار میرود.
همچنین مطابق تعریف لغتنامه، یک نام متمایزکننده است که به یک پروندهٔ کامپیوتریِ ذخیرهشدهٔ الکترونیکی داده میشود.
این نام، پروندهٔ کامپیوتری را با محدودیتهای مختلفی که سیستمعامل اعمال میکند — مانند طول یا محدودیت در انتخاب کاراکترها — مطابق میکند.
این نام ممکن است در حالتهای گوناگون دچار اعمال محدودیتهایی مانند طول نام یا نوع حروف و نویسههای مختلف نیز شود.
برای مثال، ویندوز این تعریف را ارائه میدهد: یک داده از نوع نام پرونده، یک رشتهٔ متنی است که نام یک پرونده یا پوشه را دربر میگیرد. بهطور پیشفرض تصور میشود که نام پرونده از یک ترکیب نام پروندهٔ کوتاه تشکیل میشود که شامل ۸ کاراکتر نام، وقفه (.) و ۳ کاراکتر افزونه.
برای داشتن نام بلند در کنار نام کوتاه، آن را با یک علامت "|" از نام پروندهٔ کوتاه جدا میکنیم. برای مثال، هر دو رشتهٔ status.txt و projec~1.txt|Project Status.txt معتبرند. (توجه کنید که این مطلب از سایت مایکروسافت برداشته شده؛ لذا قواعد مطروحه در آن لزومًا در سایر سیستمعاملها درست نیستند.)
یک نام پرونده، بهطور معمول از اجزای زیر تشکیل میگردد:
- میزبان (یا گره یا کارگزار (سرور)) - دستگاه شبکهای که پروندهها را در بر میگیرد.
- دستگاه (یا درایو) - دستگاه یا درایو سختافزاری
- شاخه (Directory) یا مسیر (Patch) - (مانند: \TEMP, [USR.LIB.SRC], etc.)
- نام پرونده
- پسوند نام فایل (مانند: txt ،exe، com)
- نسخه (Version)، شمارهٔ تولید یا چاپ اصلاحشده
ترکیب و قالب یک فایل معتبر مانند مؤلفههای لازم برای شناسایی فایل، در سیستمعاملهای مختلف متفاوتند.
مباحث پیرامون نام پرونده بهدلیل فقدان استانداردسازی این واژه پیچیده هستند. نام پرونده گاهی برای نام کامل مانند نام ویندوز مثل c:\directory\myfile.txt بهکار میرود. گاهی برای اشاره به اجزا استفاده میشود؛ در این مثال myfile.txt. بعضاً ارجاعی است که یک افزونه را مشخص میکند، بنابراین در این حالت نام پرونده myfile خواهد بود. چنین ابهاماتی متداول است و این مقاله تلاش نمیکند هیچ یک از معانی را تعریف کند، و فعلاً ممکن است هر یک از آنها را استفاده کنیم. بعضی سامانهها ممکن است نامگذاری استاندارد خود را پذیرفته باشند مانند «نام مسیر» (path name)؛ ولی همین اسامی نیز در سراسر سیستم استاندارد نیستند.
تاریخچه
در حدود سال ۱۹۶۲ سیستم اشتراک زمانی سازگار، مفهوم پرونده (پروندهٔ بدون کاغذ) را معرفی کرد.
تقریبًا در همین زمان، نقطه (برای توقف کامل یا کوتاه) به عنوان جداکنندهٔ افزونهٔ نام فایل بهوجود آمد و افزونه به سه حرف محدود شد.
در گذشته، تنها نویسه (کاراکتر)های حرفی–عددی در نام پرونده مجاز بودند؛ اما با گذشت زمان، تعداد کاراکترهای مجاز افزایش یافت؛ که این باعث ایجاد مشکلات همسازی در زمان انتقال پروندهها از یک فایل سیستم به دیگری شد.
در حدود سال ۱۹۹۵، یکی از افزونههای فایل سیستم FAT به نام جدول تخصیص فایل دروینوز۹۵ و ویندوز NT3.5 معرفی شد. در این افزونه، علاوهبر نامهای کلاسیک «۸٫۳»، نام پروندههای طولانی یونیکد نیز مجاز بود.
در سال ۱۹۸۵، RFC959 تعریف رسمی زیر را برای نام مسیر (path name) ارائه کرد: رشتهای از کاراکترها که باید توسط کاربر برای شناسایی فایل وارد فایل سیستم شود.
مهاجرت به یونیکد
یک مسئله، تغییر شیوهٔ نامگذاری به یونیکد بود. به این منظور، شرکتهای نرمافزاریِ بسیاری، نرمافزارهایی برای مهاجرت نام پروندهها به رمزگذاری یونیکدِ جدید فراهم کردند.
- Microsoft برای تمامی کاربران تکنولوژی vfat، نرمافزار migration transparent را ارائه داد
- Apple نرمافزار File Name Encoding Repair Utility v1.0 را ارائه داد
- Linux community نرمافزار convmv را ارائه داد
ارجاعات: مطلق در مقایسه با نسبی
یک ارجاع مطلق، تمام سطوح فهرست را شامل میشود. در بعضی سیستمها، اگر ارجاع یک نام پرونده شامل مسیر کامل فهرست نباشد، بهطور پیشفرض فهرست جاری در نظر گرفته میشود. این یک ارجاع نسبی است. یکی از مزایای استفاده از ارجاع نسبی در فایلهای پیکربندی برنامه یا اسناد این است که نمونههای مختلفی از سند یا برنامه میتوانند در پروندههای مختلف استفاده شوند.
بنابراین یک ارجاع نسبی یا مطلق مرکب از دنبالهای از نام پروندهها است.
تعداد نامهای هر فایل
فایل سیستمهای شبیه به Unix به یک فایل اجازه میدهند بیش از یک نام داشته باشد؛ نامها در فایل سیستمهای به سبک Unix قدیمی پیوندهایی سخت به آینود یا معادل فایل هستند. ویندوز از پیوندهای سخت فایل سیستمهای انتیافاس پشتیبانی میکند، و برای ساخت آنها فرمان fsutil
را در ویندوز XP، و mklink
را در نسخههای بعدی ارائه میدهد. پیوندهای سخت با کلیدهای میانبر ویندوز، یا پیوند نمادین متفاوتند. معرفی LFNها با جدول تخصیص فایل اسمهای مستعار نام پرونده را مجاز کردند. برای مثال،
با حداکثر هشت به علاوهٔ سه کاراکتر یک اسم مستعار برای
است. این نام مستعار جهت مطابقت با محدودههای ۸٫۳ برای برنامههای قدیمیتر است.
این ویژگی توسط الگوریتم فرمان move که ابتدا یک نام پروندهٔ ثانویه ایجاد میکند سپس تنها نام پروندهٔ اولیه را حذف میکند، استفاده میشد.
طراحی سایر فایل سیستمها بهگونهای است که تنها یک نام پرونده را در هر پرونده مقرر میکند. این طراحی تضمین میکند که تغییرات فایل یک نام پرونده، فایل نام پروندهٔ دیگری را تغییر ندهد.
محدودیتهای طول
بعضی فایل سیستمها طول نام پرونده را محدود میکنند. در بعضی موارد این طولها در نام کامل پرونده اعمال میشوند مانند ۴۴ کاراکتر در IBM S/370. در سایر موارد، ممکن است محدودیتهای طول در بخشهای خاصی از نام پرونده، از قبیل نام فایل در فهرست یا نام فهرست اعمال شوند. برای مثال: ۹ کاراکتر یا بایت (مانند جدول تخصیص فایل ۸ بیتی در Standalone Disk BASIC)، ۱۱ کاراکتر یا بایت (مانند جدول تخصیص فایل۱۲، جدول تخصیص فایل۱۶، جدول تخصیص فایل۳۲، ۱۴ کاراکتر یا بایت (مانند Unix اولیه)، ۲۱ کاراکتر یا بایت، ۳۰ کاراکتر یا بایت (Human68k)؛ ۳۱ کاراکتر یا بایت (مانند Apple DOS ورژن ۳٫۳ و ۳٫۲)، ۱۵ کاراکتر یا بایت (مانند Apple proDOS)؛ ۴۴ کاراکتر یا بایت (مانند IBM S/370)، یا ۲۵۵ کاراکتر یا بایت (مانند Berkeley Unix اولیه). محدودیتهای طول عموماً نتیجهٔ تخصیص فضای معینی در فایل سیستم برای ذخیرهٔ مؤلفههای نام است، به همین دلیل، محدودیتهای بیشتر همانند اختصاصدادن فضای بیشتر نیازمند یک تغییر ناسازگارند.
یک مسئلهٔ مهم در رابطه با فایل سیستمهایی که اطلاعات را در فهرستهای تودرتو ذخیره میکنند، این است که شاید امکان ایجاد پروندهای که اسم کامل آن از محدودیتهای پیادهسازی تجاوز کند وجود داشته باشد؛ زیرا ممکن است بررسی طول بهجای نام کامل برای بخشهای مجزای نام، بهتنهایی انجام شود. حداکثر محدودهٔ (MAX_PATH) بسیاری از نرمافزارهای کاربردی ویندوز ۲۶۰ است، در حالی که نام پروندههای ویندوز بهراحتی میتوانند از این محدوده تجاوز کنند.
افزونهها (extensions) نام پرونده
بسیاری از فایل سیستمها، مانند سیستمهای جدول تخصیص فایل، انتیافاس و vms به یک افزونهٔ نام پرونده اجازه میدهند نام پرونده را به دو بخش تقسیم کند: یک نام اصلی یا ریشه و یک افزونه یا پسوند که بعضی از نرمافزارهای کاربردی برای تشخیص قالب پرونده از آن استفاده میکنند. افزونهٔ نام فایل از یک یا چند کاراکتر تشکیل میشود که پیروی آخرین بخش نام پرونده میآیند. پروندههای دارای خروجی چندگانه توسط نرمافزارهای کاربردی که از نام اصلی یکسان و افزونههای متفاوت استفاده میکنند ایجاد میشوند. برای مثال، ممکن است یک کامپایلر از افزونههای FOR
برای پروندهٔ ورودی منبع (برای کد Fortran), OBJ
برای خروجی شیء و LST
برای فهرستنویسی استفاده کند. با اینکه تعدادی افزونهٔ متداول وجود دارد، اما این افزونهها قراردادی هستند و ممکن است یک نرمافزار کاربردی دیگر از REL
و RPT
استفاده کند. معمولاً پروندهها در فایل سیستمهایی که افزونهها را جدا نمیکنند، افزونهٔ طولانیتری دارند مانند html
.
قابلیتهای همکاری رمزگذاری
برای نام پروندهها یک رمزگذاری استاندارد عمومی وجود ندارد.
چرا که نام پروندهها باید میان نرمافزارها مبادله شوند (انتقال فایل شبکه، ذخیرهٔ فایل سیستم، نرمافزار پشتیبانی و هماهنگسازی پرونده، مدیریت پیکربندی، فشردهسازی و بایگانی داده و…)، این بسیار مهم است که اطلاعات نام پرونده میان دو نرمافزار کاربردی از دست نرود. این مسئله موجب پذیرش گستردهٔ یونیکد بهعنوان استانداردی برای رمزگذاری پروندهها شد، گرچه برخی نرمافزارهای قدیمی ممکن است یونیکد را متوجه نشوند.
قابلیت همکاری نشانهٔ رمزگذاری
در گذشته، نام پروندهها در هر کاراکتری را تا جایی که برای فایل سیستم ایمن بود در نام پروندههای خود مجاز میدانستند. با اینکه این روش استفاده از هرگونه رمزگذاری را مجاز میداند، و به همین دلیل، امکان نمایش هر متن محلی را در هر سامانهٔ محلی فراهم میکند، منجر به بسیاری از قابلیتهای همکاری میشود.
یک نام پرونده داخل یک کشور ممکن است با استفاده از رشتههای بایتی متفاوتی در سامانههای متمایز ذخیره شده باشد، مثلاً یکی با استفاده از رمزگذاری Japanese Shift یا JIS و دیگری از رمزگذاری Japanese EUC. تبدیل ممکن نبوده؛ زیرا بیشتر سامانهها شرحی از رمزگذاری که برای یک نام پرونده استفاده شده را به عنوان قسمتی از اطلاعات فایل توسعهیافته نمایش نمیدادند.
یک راه حل، پذیرش یونیکد برای رمزگذاری نام پروندهها بود.
اما در MacOS کلاسیک، رمزگذاری نام پروندهها همراه خصوصیات نام پرونده ذخیره میشد.
قابلیت همکاری یونیکد
استاندارد یونیکد مسئلهٔ تشخیص رمزگذاری را برطرف کرد.
با این حال، بعضی مسائل قابلیت همکاری محدود از قبیل هنجارسازی یا normalization (همارزی)، یا نسخهٔ در حال استفادهٔ یونیکد باقی ماند. برای نمونه، UDF به یونیکد ۲٫۰ محدود شد؛ MacOS هنجارسازی یونیکد NFD که بهطور اختیاری میتواند به حروف کوچک و بزرگ حساس باشد (بهطور پیشفرض حساس نیست) را اعمال میکند. حداکثر طول نام پرونده استاندارد نیست و ممکن است به اندازهٔ واحد کد وابسته باشد. اگرچه این یک مسئلهٔ جدی است، در اکثر موارد یک مسئلهٔ محدود است. در لینوکس به این معناست که نام پرونده برای باز کردن آن کافی نیست: علاوهبر آن، نمایش دقیق بایتی نام پرونده روی دستگاه حافظه نیاز است. این با تعدادی فراخوانیهای هنجارسازی مکارانه در سطح نرمافزار قابل حل است.
این مسئله از همارزی یونیکد را «برخورد با نام نرمال» مینامند. یک راه حل آگاهی از ترکیب غیرنرمال یونیکد است که در تخریب و سرقت از جوامع فنی استفاده میشود. این راه حل مسیرهای داخل حافظه را هنجارسازی نمیکند. مسیرها تنها برای مقایسه هنجارسازی میشوند. با این حال، بعضی جوامع این راهبرد را انحصاری کردند، بهطوریکه استفاده از آن در سایر جوامع ممنوع باشد.
چشماندازها
برای محدودکردن مسائل قابلیت همکاری بعضی اندیشهها که توسط Sun شرح داده شده عبارتند از:
- استفاده از یک رمزگذاری یونیکد (مانند جدول تخصیص فایل_۸)
- انجام تبدیلات شفاف کد روی نام پروندهها
- ذخیرهٔ نام پروندههای هنجارسازینشده
- بررسی برای همارزی استاندارد میان نام پروندهها، برای جلوگیری از دو نام پروندهٔ همارز استاندارد در یک فهرست یکسان
این توجهات یک محدودیت را ایجاد میکند که اجازهٔ تغییر به یک رمزگذاری متفاوت با جدول تخصیص فایل_۸ در آینده را نمیدهد.
یکتایی
نام پروندهها داخل یک فهرست باید یکتا باشند. از آنجا که ترکیب مربوط به نام پرونده برای فهرستها نیز اعمال میشود، امکان ایجاد یک فایل و ورودیهای فهرست با نام یکسان وجود ندارد. البته فایلهای متعدد در فهرستهای مختلف میتوانند نام یکسانی داشته باشند.
رویکرد یکتایی میتواند حساسیت نسبت به حروف کوچک و بزرگ و شکل استانداردسازی یونیکد را تغییر دهد مانند NFC و NFD. یعنی دو پروندهٔ مجزا میتوانند با متن نام پروندهٔ یکسان و پیادهسازی بایتی متفاوت از آن نام پرونده ایجاد شوند.
حفاظت از بزرگی یا کوچکی حروف
بعضی فایل سیستمها، مانند جدول تخصیص فایل، نام پروندهها را بدون توجه به کوچک یا بزرگ بودن حروف آنها با حروف بزرگ ذخیره میکنند. برای مثال، اگر پروندهای با نام «MyName.Txt» یا «myname.txt» ایجاد شده باشد با نام پروندهٔ «MYNAME.TXT» ذخیره خواهد شد. هر تغییری در حروف کوچک و بزرگ میتواند برای ارجاع به یک پروندهٔ یکسان استفاده شود. این نوع فایل سیستمها غیر حساس به حروف کوچک و بزرگ (case-insensitive) نامیده میشوند و محافظ کوچکی و بزرگی حروف(case-preserving) نیستند. بعضی فایل سیستمها اجازه نمیدهند در نام پروندهها فقط از حروف کوچک استفاده شود.
بعضی فایل سیستمها نام پروندهها را به همان شکلی که ایجاد شدند، ذخیره میکنند؛ به این فایل سیستمها نگهدارندهٔ حروف کوچک و بزرگ (case-retentive) یا محافظ حروف کوچک و بزرگ(case-preserving) میگویند. چنین فایل سیستمی میتواند نسبت به حروف کوچک و بزرگ حساس یا غیرحساس باشد. اگر حساس باشد، آنگاه «MyName.Txt» و «myname.txt» میتوانند به دو فایل مختلف در یک فهرست یکسان اشاره کنند، و به هر پرونده باید دقیقًا با همان ترکیبی از حروف کوچک و بزرگ که با آن نامگذاری شده ارجاع داده شود. از سوی دیگر در یک فایل سیستم غیرحساس به حروف کوچک و بزرگ فقط یکی از نامهای «MyName.Txt» و «myname.txt» و «Myname.TXT» میتوانند همزمان در یک فهرست نام یک پرونده باشند، و به یک پرونده با یکی از این نامها با هر ترکیبی از حروف کوچک و بزرگ میتوان ارجاع داد.
Unix و سامانههای فرعی آن از شروع اصلیش محافظ حروف کوچک و بزرگ بودند. اما، همه انواع فایل سیستمهای Unix حساس به حروف کوچک و بزرگ نیستند؛ بهطور پیشفرض، HFS+ در macOS نسبت به حروف کوچک و بزرگ حساس است، و کارگزاران SMB (بلوک پیام سرور) رفتارهای غیرحساس به حروف کوچک و بزرگ ارائه میدهند (حتی زمانی که فایل سیستم اصلی به حروف کوچک و بزرگ حساس باشد، مانند سامبا در بیشتر سامانههای شبیه به Unix) و فایل سیستم کاربر SMB رفتار غیرحساس نسبت به حروف کوچک و بزرگ ارائه میدهد. حساسیت یا عدم حساسیت فایل سیستم به حروف کوچک و بزرگ یک چالش قابل توجه برای نرمافزار است مانند سامبا و واین، که باید بهطور کارآمد همکاری کند هم با سامانههایی که با پروندههای با حروف بزرگ و پروندههای با حروف کوچک متفاوت رفتار میکنند و هم سامانههایی که با آنها یکسان برخورد میکنند.
جستارهای وابسته
- سیستم پرونده
- شناساگر یکنواخت منبع (URI)
- نشانی وب (URL)
منابع
- ↑ http://www.dictionary.com/browse/filename
- ↑ https://msdn.microsoft.com/en-us/library/windows/desktop/aa368590(v=vs.85).aspx
- ↑ Howard, Randall (December 31, 2008). "General, History". Randalljhoward.com. Archived from the original on 1 December 2017. Retrieved September 17, 2013.
- ↑ David Robinso; Ienup Sung; Nicolas Williams (March 2006). "Solaris presentations: File Systems, Unicode, and Normalization" (PDF). San Francisco: Sun.com. Archived from the original (PDF) on July 4, 2012.
- ↑ RFC 959 IETF.org RFC 959, File Transfer Protocol (FTP)
- ↑ "File Name Encoding Repair Utility v1.0". Support.apple.com. June 1, 2006. Retrieved September 17, 2013.
- ↑ "convmv - converts filenames from one encoding to another". J3e.de. Retrieved September 17, 2013.
- ↑ "Fsutil command description page". Microsoft.com. Retrieved September 15, 2013.
- ↑ "NTFS Hard Links, Directory Junctions, and Windows Shortcuts". Flex hex. Inv Softworks. Retrieved March 12, 2011.
- ↑ "ddname support with FTP, z/OS V1R11.0 Communications Server IP User's Guide and Commands z/OS V1R10.0-V1R11.0 SC31-8780-09". IBM.com.
- ↑ "Filenames with accents". Ned Batchelder. Retrieved September 17, 2013.
- ↑ "NonNormalizingUnicodeCompositionAwareness - Subversion Wiki". Wiki.apache.org. January 21, 2013. Archived from the original on 10 March 2017. Retrieved September 17, 2013.
- ↑ "Cross platform filepath naming conventions - General Programming". GameDev.net. Retrieved September 17, 2013.
- ↑ "CaseInsensitiveFilenames - The Official Wine Wiki". Wiki.winehq.org. November 8, 2009. Archived from the original on 18 August 2010. Retrieved August 20, 2010.