سؤال كيف يمكن أن يكون حجم الملف صفرًا؟


مجرد شيء واجهت ولم أستطع التفكير في تفسير مناسب. إذا قمت بإنشاء ملف * .txt فارغ على جهاز الكمبيوتر الخاص بي ثم أنظر إلى حجمه ، فإنه يظهر 0. لكن كيف يمكن ذلك؟ أعني حتى لو كان الملف فارغًا ، يجب أن يكون له حجم ما ، فقط لتخزين اسمه. كيف يمكن تفسير هذا؟ (غير خاص بنظام التشغيل)


173
2017-09-15 08:32


الأصل


اسم الملف لا يحسب في الملف ، وكيف يمكن تفسير ذلك. - njzk2
أتذكر صديقًا في الكلية كتب أحد البرامج لتخزين النصوص كأسماء ملفات للالتفاف على الحصة النسبية للقرص. - slebetman
ColeJohnson كنت متدربًا في عام 2000 في أحد معمل الكمبيوتر الخاص بي ، وحسبت حصة المستخدم كمجموع للملفات. لذلك ، فإن تخزين البيانات كأسماء ملفات سوف يتفوق في الواقع على موقع qouta. هيك يمكنك حفظ برنامج في المجلدات ولن يتم احتسابها مقابل حصتك. - Mindwin
slebetman هذه هي النقطة التي يصبح فيها الخط الفاصل بين العبقرية والجنون غير واضح. - Pharap
واشتهرت تقنية مماثلة في تحدي الضغط، - Oddthinking


الأجوبة:


من الممكن لأنه لا يوجد ملف بالفعل. هناك فقط إدخال دليل مع اسم ومالك. يختلف إدخال الدليل منطقيًا عن الملف. على سبيل المثال ، يمكن أن يحتوي نفس الملف على أكثر من اسم واحد في أكثر من دليل واحد.

للأسف ، لا يُستخدم مصطلح "ملف" دائمًا للإشارة إلى نفس الشيء بالضبط. لكن منطق حجم الملف يأتي من النموذج حيث يقوم إدخال الدليل بإرفاق ملف إلى دليل ، ويتم تخزين أسماء الملفات والبيانات الوصفية ذات الصلة في الدليل.


201
2017-09-15 08:34



... تُعرف أيضًا باسم الروابط الثابتة. - Daniel B
في الدليل. وإلا ، إذا كان الملف نفسه في دليلين وقمت بإعادة تسميته في أحدهما ، فسيؤدي ذلك إلى تعديل الدليل الآخر ، مما لا معنى له على الإطلاق. أيضا ، لو لم تكن بهذه الطريقة ، ماذا ستكون محتويات الدليل؟ - David Schwartz
في معظم أنظمة تشغيل UNIX ، مثل FreeBSD و Linux ، يمكنك بسهولة الحصول على حجم الدليل. أوامر مثل ls -ld <directory> سيعمل. - David Schwartz
لا أعرف ما إذا كان هذا صحيحًا للإصدار الحالي من NTFS ، لكن الإصدارات المبكرة (مثل NT3.x) ستخزن البيانات لملفات صغيرة جدًا في إدخال الدليل. الملف سيكون حرفيا غير موجود. - John Rennie
ليس صحيحًا تمامًا أنه لا يوجد ملف ، ما لم يكن نظام NTFS مختلفًا تمامًا عن أنظمة الملفات الأخرى. في نظام ملفات Unix عادي ، سيكون هناك نظام inode يخزن الأذونات ، و mod-times ، وما إلى ذلك. لا يزال إدخال الدليل يشير إلى هذا الرمز. الاختلاف الوحيد بين ملف فارغ وملف غير فارغ هو مؤشر تخصيص الكتل. يحتوي الملف الفارغ على ما يكافئه نظام الملفات لمؤشر NULL لخريطة كتلته ، مع ذلك ، للإشارة إلى أنه لا يحتوي على أي كتل بيانات. لا تشبع إدخالات الدليل مع أذونات وأوقات التعديل ، حتى بالنسبة للملفات الفارغة. على سبيل المثال ، xodes inodes هي 256B - Peter Cordes


المعنى الدلالي لـ "حجم الملف" يختلف عن المعنى الذي تستخدمه.

هناك العديد من أحجام الملفات التي تكون ذات مغزى. الأكثر شيوعًا ، والآخر الذي تراه هنا هو "عدد البايتات في الملف." إذا كان الملف عبارة عن ملف نصي فارغ ، فقد يحتوي بالفعل على 0 بايت. هذا الرقم مهم للمبرمجين لأننا في كثير من الأحيان نحتاج إلى فتح ملف "قراءة كل البيانات" وإغلاقها. نحتاج إلى معرفة عدد بايت البيانات في الملف حتى نتمكن من التخطيط للمستقبل.

ينشأ معنى آخر عن الطريقة التي تخزن بها معظم أنظمة الملفات البيانات. تقوم معظم أنظمة الملفات بتخزين البيانات في كتل. على سبيل المثال ، قد يخزن نظام الملفات البيانات في كتل 64 كيلوبايت ، مما يعني أنه لن يخصص أيًا من العناصر التي ليست متعددة حتى من 64 كيلو بايت. يبدو هذا غير فعال ، لكنه يمكن أن يجعل عملية حفظ الدفاتر أبسط بكثير ، وغالبا ما تكون أبسط وسيلة أسرع.

المعنى الثالث ، الذي تقوم بربطه ، هو العدد الفعلي للبتات المطلوبة على القرص الصلب لوصف وجود ملف. يتضمن ذلك المعلومات التي يتم تخزينها بشكل منفصل بشكل منفصل عن الملف. على سبيل المثال ، في Linux ، يتم تخزين مفهوم "filename" في inode للدليل الذي يحتوي على الملف (تحرير: من التعليقات ، يتم تخزين هذا من الناحية الفنية في بيانات الدليل. عندما كتبت هذا ، كنت أفكر في الصغيرة يمكن تخزين البيانات التي يقل حجمها عن 156 بايت مباشرة في inode). هذا ليس معنى شائع الاستخدام ، لأنه من الصعب للغاية تحديد دون معرفة عمل داخلية عميقة للغاية من نظام الملفات الخاص بك (هل حساب للمساحة اللازمة لتخزين كافة الأذونات على الملف؟). ومع ذلك ، إذا كان لديك محرك أقراص ثابت سعة 1،000،000 بايت ، وتريد أن تعرف حجم الملف الذي يتناسب مع محرك الأقراص الثابتة ، فسيكون هذا معنى هامًا بالنسبة لك!


82
2017-09-15 17:41



"في inode الدليل الذي يحتوي على الملف" لا تقصد بيانات الدليل ، بدلا من inode؟ يحتوي رمز inode على أحجام وتواريخ الملفات ، ولكن لا توجد أسماء ... - Medinoc
Medinoc نقطة جيدة. كنت أفكر في حالة المضمنة عند تخزين البيانات داخل inode ، ولكن لم أكن في الواقع تحقق لمعرفة كم يمكن أن يحدث هذا! لقد قمت بإضافة تعديل. - Cort Ammon
ذات صلة ميزة البيانات المضمنة من ext4 ، وهذا هو بأي حال من الأحوال عالمية في جميع أنظمة الملفات. بالإضافة إلى ذلك ، ينطبق هذا على الملفات inode ، وليس الدليل. فهي منفصلة ، والدلائل أيضا لديها القدرة على البيانات المضمنة ، لكنها ميزات منفصلة. يحتوي ملف inode على حجم مجموعة ، على الأقل في حالة ext4 ، وبالتالي فإن استخدام البيانات من الأذونات غير ذي صلة. يعتمد استخدام قرص الملفات بشكل كبير على نظام الملفات المستخدم ، والجزء الثالث من هذه الإجابة ينطبق فقط على ext4 بقدر ما أستطيع أن أقول ، هذا غير واضح. - Phizes
إذا كان لديك محرك أقراص ثابت سعة 1،000،000 بايت ، فقد يكون الوقت قد حان للبدء في التفكير في الترقية. - nekomatic


يتم تخزين اسم الملف في مكان آخر.

سيحتوي القرص الخاص بك على "نظام ملفات" عليه ، ويضع ببساطة طريقة لاختيار كيفية تمثيل أسماء الملفات والملفات وتفسيرها على القرص الفعلي.

في معظم أقراص Windows ، ستستخدم نظام ملفات يسمى "NTFS" (نظام ملفات تقنية جديد) ، وهذا يخزن معلومات اسم الملف في جدول الملفات الرئيسية (MFT) منفصلة عن محتويات الملف. مقالة ويكيبيديا على جدول الملفات الرئيسي.

وبالتالي سيكون الملف نفسه من 0 بايت بايت ، ولكن سيظل إدخاله في MFT بعض المساحة.


53
2017-09-15 21:58



وفي حالة NTFS ، حجم الملف الذي تم الإبلاغ عنه بواسطة Windows ومعظم الأدوات هو في الواقع حجم التيار الملف ، الذي نعتبره محتوى الملف. يمكن تخزين بعض الملفات المخزنة في الملف المخزن على قسم NTFS تدفقات البيانات البديلة، ولا يزال حجم التقارير عنها 0. انها ميزة نظام ملفات لطيفة لمعرفة ما إذا كنت ترغب في الحصول على الصورة الكاملة :) - Paweł Bulwan


هذا سؤال وجودي مثير للاهتمام ...

الملف نفسه هو محتوى الملف. إذا كان الملف لا يحتوي على أي محتوى ، فإنه يحتوي على حجم صفر. يعد اسم الملف جزءًا من الملف لأن اسمك هو جزء منك فعليًا (على سبيل المثال ، ليس كذلك).

وكما أن اسمك موجود كفكرة في رؤوس الأشخاص (والخاصة بك) تشير / تشير إلى المادي ، فإن اسم الملف موجود في شجرة دليل نظام الملفات ويشير / يشير إلى الملف.


12
2017-09-16 14:59





(متأخرة قليلا على الجواب ...)

كيف يمكن أن يكون حجم الملف هو صفر أكثر تعقيدًا قليلاً مما هو مذكور في الإجابات السابقة. تم وضع علامة على السؤال Win7 ، ولكن بالنظر إلى أنظمة الملفات "الأبسط" الأخرى مثل سمين أو NTFS، قد يكون مفيدا لأن المفاهيم متشابهة.

القرص لا "يعرف" ما هو ملف وما هو دليل. انها كل البيانات في كتل صغيرة. يميز نظام التشغيل بين معاني كتل البيانات. الأولى القليلة الخاصة ، ولكن بقية الكتل تحتوي إما على معلومات حول البيانات (على سبيل المثال: اسم الملف ، طول الملف ، أول كتلة بيانات تحمل البيانات) ، أو البيانات نفسها.

الدليل عبارة عن "ملف" خاص "بياناته" التي يفهمها نظام التشغيل عبارة عن كتلة معلومات تحتوي على معلومات حول الملفات ، وليس محتوى الملفات. التشابه الجيد هو المكتبة المادية وكاتالوج البطاقة. التفكير في كتل المعلومات مثل كتالوج البطاقات والرفوف كتل البيانات (كتالوج بطاقة يجلس أيضا على بنية شبيهة الرف).

عند "إنشاء" ملف (قل مع UNIX touch الأمر) ، يقوم نظام التشغيل أولاً بإنشاء إدخال في كتلة معلومات (دليل) ، مع ما يلي:

  • اسم = My_File.txt
  • الطول = 0
  • بدء تشغيل كتلة البيانات = N / A
  • معلومات إضافية (مالك ، أذونات ، تاريخ الإنشاء / تحديث / تعديل) ، إلخ

فقط إذا كانت هناك بعض البيانات "للكتابة" فهل تحاول العثور على كتلة بيانات فارغة لتخزين البيانات. ولكن كتل البيانات تأتي في أحجام ثابتة (لنقل 32 كيلوبايت) ، بحيث يكون القرص ملائمًا للوصول إلى نظام التشغيل وقراءته. إذا كنت تكتب "Hello" فقط ، فإن معظم كتلة "فارغة" (في الواقع قد لا تكون أصفار ، ولكن القمامة من ما كان موجودًا من قبل) ، لذلك فإن الجدول الآن يقوم أيضًا بتحديث الحجم إلى الطول (قل 5 أحرف + نهاية ملف) حتى لا تحصل على الاشياء السيئة.

عندما تقوم بتحديث "الملف" إلى طول> حجم الكتلة ، يقوم نظام التشغيل بكتابة البيانات إلى الكتلة الجديدة ويقوم بتحديث كتلة البيانات ليقول أن الملف يستمر في الكتلة التالية بعد الأول (وهكذا) ويتم تحديث الطول طول جديد (التفاصيل تختلف).

ما ينتهي بك الأمر هو مجموعة من كتل بيانات المعلومات (الدلائل أو القوائم) مع معلومات حول سلاسل كتل البيانات (محتويات الملف).

منطقياً ، يفسر هذا أيضًا سبب وميض نقل ملف على نفس نظام الملفات بينما تستغرق النسخة وقتًا طويلاً. نظام التشغيل لديه فقط لتحرير كتل الدليل 2 لإزالة الإدخال من دليل واحد (كتلة بيانات المعلومات) وإضافة إلى آخر. حذف ملف: فقط قم بإزالة الإدخال في كتلة الدليل ، لتحرير كتل بيانات الملف ليتم إعادة تخصيصها.

ملحوظة: فقط لأن كتالوج البطاقة يحتوي على مدخل للكتاب لا يعني أنه موجود على الرف (إما سحبه أو فقده) ؛ حجم الملف 0.

pps: كتاب خاطئ في المكتبة ينطوي على مكتبة البحث ، أو في شروط الكمبيوتر: chkdsk أو قرص الإصلاح!

يمكن الحصول على فهم أفضل من خلال القراءة عن UNIX inodes أو تقدير كيفية إدارة أنظمة إصدار (ClearCase ، TFS ، Git ، الخ) ليس فقط إدارة الملفات والدلائل ، ولكن أيضا إصدارات من الملفات وحتى إصدارات من الدلائل. في معظم الحالات ، يتم تخزين كل شيء في قاعدة بيانات وعرضها على المستخدم للظهور كملف ودليل كلاسيكي للمجلدات!


7
2017-09-16 09:55





لدينا بعض الإجابات الممتازة هنا - أود فقط أن أضيف النسخة المصورة (ألف كلمة وكل ذلك).

هذا هو ما يبدو عليه أحد محركات الأقراص الثابتة ذات تنسيق NTFS إذا كنت تصورها باستخدام أداة إلغاء تجزئة القرص. ال MFT (جدول الملفات الرئيسي) يظهر في البنفسجي:

enter image description here

يصف هذا المربع البنفسجي الصغير قائمة الملفات الموجودة في HD. بشكل قاطع ، بالنسبة لقرص NTFS ، ما هو جدول المحتويات الخاص بكتاب ؛ بدلاً من الصفحات ، يشير إلى موقعها الفعلي على باقي القرص1.

يمكن تصور ملف بحجم صفر بايت كإدخال جدول المحتويات الذي يشير إلى عدم وجود صفحة على الإطلاق:

enter image description here

الإدخال موجود ، مدرج - ولكن بما أنه لا توجد صفحة محددة ، يمكننا الافتراض أن المحتوى غير موجود.

1 - بالتأكيد ، الأمر أكثر تعقيدًا من ذلك ؛ ولكن مثل الخرائط القطاعية ، فإن MFTs المرآة ، إلخ ، خارج نطاق الأسئلة.


4
2017-09-24 00:05





مخزن أنظمة الملفات كثير من المعلومات حول ملف مثل اسم الملف ، حجم الملف ، وقت الإنشاء ، وقت الوصول ، الوقت المعدل ، المستخدم المُنشأ ، أذونات المستخدمين والمجموعات ، الأجزاء ، المؤشر إلى العناقيد التي تخزن الملف ، الروابط الثابتة / الصلبة ، السمات ... تلك تسمى ملف تعريف البيانات. لماذا تحسب هذه البيانات الوصفية في حجم الملف عندما لا يكون المستخدمون (بحاجة إلى) يهتمون بهم ولا يعرفون عنها؟ انهم يهتمون حقا فقط عن محتوى الملف

علاوة على ذلك يخزن كل نظام أنواع مختلفة من البيانات الوصفية والتي تأخذ كميات مختلفة من المساحة على القرص. على سبيل المثال ، تختلف أذونات POSIX عن إذن NTFS ، وهناك أيضًا inode الأرقام في POSIX التي لا توجد على ويندوز. حتى أنظمة ملفات POSIX تختلف كثيرا ، مثل ext3 مع عنوان كتلة 32 بت ، ext4 مع 48 بت ، Btrfs مع 64 بت و ZFS مع عنوان 128 بت. كيف ستحسب هذه البيانات الوصفية في حجم الملف؟

خذ مثالاً آخر مع ملف 100 بايت الذي يستهلك بياناته الأولية 56 بايت على نظام الملفات الحالي. نقوم بنسخ الملف إلى نظام ملفات آخر ويستغرق الآن 128 بايتًا من البيانات الوصفية. ومع ذلك محتويات الملف هي نفسها بالضبطعدد البايتات في الملفات هي نفسها أيضا. لذا عرض حجم الملف كـ 156 بايت على نظام لكن 228 بايت على آخر جداً مربكة ومضادة للبديهية.


3
2017-09-16 09:41





حجم ملف 0، يشبه قول: لدي ورقة بها 5 الكلمات على ذلك. وعلى ورقة أخرى ، لديها 0 الكلمات على ذلك. وبالتالي 0 ممكن تماما.

يتم تخزين جميع البيانات الوصفية للملف (وقت تاريخ الإنشاء ، وآخر وقت تم تعديله ، ومالك الملف ، والأذونات) ، حيث لا يتم تضمينها كجزء من حجم الملف.


1
2017-12-25 04:37





فهمه بطريقة بسيطة ... عند إنشاء ملف .. يوجد إدخال دليل تم إنشاؤه والذي يعمل كمؤشر لموقع الذاكرة الخاص بالملف الذي تم تحديده بواسطة اسم الملف الذي تقدمه. يزداد حجم الدليل كلما قمت بإنشاء المزيد والمزيد من المؤشرات أو قل الملفات .. بينما يزيد حجم الملف فقط إذا قمت بوضع بيانات ssome في المكان المشار إليه ، أي داخل الملف نفسه. حتى ذلك الحين سيكون الحجم صفر. :)


0
2017-09-16 18:55



هذا في الحقيقة تعليق - وليس إجابة - ويكرر فقط ما قاله الآخرون. - JakeGould


هذه هي الطريقة التي تعمل بها:

بمجرد إنشاء أي ملف على وحدة تخزين ، يقوم بإنشاء سجل ملف في ملف NTATA mata ، بمعنى $ MFT (جدول الملفات الرئيسي). نظراً لوجود FRS (مقطع سجل ملف) موجود في MFT سترى سجل. كل سجل ملف من حجم 1 كيلو بايت بشكل افتراضي في حالة من NTFS FileSystem. ولكن يتم المطالبة بهذه المساحة فقط إذا قمت بتخزين بعض المعلومات داخل الملف. على الرغم من أنك فقط كتابة حرف واحد "a" مع الأخذ في الاعتبار أنه ملف نصي ، فإنه سيدعي 1 كيلو بايت من المساحة لأن هذا هو الحجم الافتراضي FRS. ينتقل الحرف "a" إلى دفق البيانات الافتراضي وغير المسمى لـ FRS ، $ Data ، وهو عبارة عن سمة يتم نقل بياناتك إليها إذا لم يكن لديك ADS (دفق بيانات بديل).

اسمحوا لي أن أعرف ما إذا كنت ستطرح أي أسئلة.


0
2017-09-23 17:19