सवाल फ़ाइल का आकार शून्य कैसे हो सकता है?


बस कुछ जो मैंने भाग लिया और उचित स्पष्टीकरण के बारे में नहीं सोच सका। अगर मैं अपने पीसी पर एक खाली * .txt फ़ाइल बनाता हूं और उसके आकार को देखता हूं, तो यह 0 दिखाता है। लेकिन यह कैसे संभव है? मेरा मतलब यह भी है कि फ़ाइल स्वयं खाली है, फिर भी इसका अपना नाम स्टोर करने के लिए अभी भी कुछ आकार होना चाहिए। इसे कैसे समझाया जा सकता है? (गैर ओएस विशिष्ट)


173
2017-09-15 08:32


मूल


फ़ाइल नाम फ़ाइल में गिनती नहीं है, यह कैसे समझाया जा सकता है। - njzk2
मुझे कॉलेज में एक दोस्त की याद आ रही है जिसने डिस्क कोटा के चारों ओर जाने के लिए फ़ाइल नाम के रूप में टेक्स्ट स्टोर करने के लिए सॉफ़्टवेयर का एक टुकड़ा लिखा था। - slebetman
@ कोलेजोहनसन मैं 2000 के दशक में अपने यू के कंप्यूटर प्रयोगशाला में से एक में इंटर्न था, और उपयोगकर्ता कोटा को फाइलसाइज़ के योग के रूप में गणना की गई थी। तो डेटा नाम के रूप में डेटा भंडारण वास्तव में qouta के आसपास मिल जाएगा। बिल्ली आप एक कार्यक्रम को बचा सकता है फ़ोल्डरों और यह आपके कोटा के खिलाफ नहीं गिना जाएगा। - Mindwin
@ स्लेबेटमैन यह वह बिंदु है जहां प्रतिभा और पागलपन के बीच की रेखा धुंधली हो जाती है। - Pharap
एक समान तकनीक का इस्तेमाल प्रसिद्ध रूप से किया जाता था संपीड़न चुनौती, - Oddthinking


जवाब:


यह संभव है क्योंकि वास्तव में कोई फ़ाइल नहीं है। नाम और मालिक के साथ सिर्फ एक निर्देशिका प्रविष्टि है। निर्देशिका प्रविष्टि फ़ाइल से तार्किक रूप से अलग है। उदाहरण के लिए, एक ही फ़ाइल में एक से अधिक निर्देशिका में एक से अधिक नाम हो सकते हैं।

दुर्भाग्यवश, "फ़ाइल" शब्द का प्रयोग हमेशा एक ही चीज़ के लिए नहीं किया जाता है। लेकिन फ़ाइल आकार तर्क मॉडल से आता है जहां एक निर्देशिका प्रविष्टि एक निर्देशिका में फ़ाइल संलग्न करती है और फ़ाइल नाम और संबंधित मेटाडेटा निर्देशिका में संग्रहीत होती है।


201
2017-09-15 08:34



... हार्ड लिंक के रूप में भी जाना जाता है। - Daniel B
निर्देशिका में अन्यथा, यदि एक ही फ़ाइल दो निर्देशिकाओं में थी और आपने इसे एक में बदल दिया, तो वह अन्य निर्देशिका को संशोधित करेगा, जो बिल्कुल समझ में नहीं आएगा। इसके अलावा, यह इस तरह से नहीं था, एक निर्देशिका की सामग्री क्या होगी ?! - David Schwartz
अधिकांश यूनिक्स जैसे ओएस, जैसे फ्रीबीएसडी और लिनक्स पर, आप आसानी से निर्देशिका का आकार प्राप्त कर सकते हैं। जैसे कमांड ls -ld <directory> काम करेगा। - David Schwartz
मुझे नहीं पता कि यह एनटीएफएस के वर्तमान संस्करण के लिए सच है, लेकिन प्रारंभिक संस्करण (उदा। NT3.x पर) निर्देशिका प्रविष्टि में बहुत छोटी फ़ाइलों के लिए डेटा स्टोर करेगा। फाइल सचमुच मौजूद नहीं होगी। - John Rennie
यह सच नहीं है कि कोई फ़ाइल नहीं है, जब तक कि एनटीएफएस अन्य फाइल सिस्टम से बहुत अलग न हो। एक सामान्य यूनिक्स फाइल सिस्टम पर, अनुमतियों को संग्रहीत करने के लिए एक इनोड होगा, मॉड-टाइम, और इसी तरह। निर्देशिका प्रविष्टि अभी भी इस इनोड को संदर्भित करती है। एक खाली फ़ाइल और एक गैर-खाली फ़ाइल के बीच एकमात्र अंतर ब्लॉक आवंटित करने वाला सूचक है। एक खाली फ़ाइल में अपने ब्लॉक मानचित्र के लिए एक पूर्ण सूचक के बराबर फाइल सिस्टम है, हालांकि, यह इंगित करने के लिए कि इसमें कोई डेटा ब्लॉक नहीं है। निर्देशिका प्रविष्टियों को खाली फ़ाइलों के लिए भी अनुमतियों और आधुनिक समय के साथ अव्यवस्थित नहीं किया जाता है। उदाहरण के लिए एक्सएफएस इनोड 256 बी हैं - Peter Cordes


"फ़ाइल आकार" का अर्थपूर्ण अर्थ आपके द्वारा उपयोग किए जा रहे से अलग है।

कई फ़ाइल आकार हैं जो सार्थक हैं। सबसे आम एक, और जिसे आप यहां देख रहे हैं, वह "फ़ाइल में बाइट्स की संख्या" है। अगर फ़ाइल एक खाली पाठ फ़ाइल है, तो इसमें वास्तव में 0 बाइट्स हो सकते हैं। यह संख्या प्रोग्रामर के लिए महत्वपूर्ण है क्योंकि हमें अक्सर एक फ़ाइल खोलने की आवश्यकता होती है, "सभी डेटा पढ़ें," और इसे बंद करें। हमें यह जानने की जरूरत है कि फ़ाइल में कितने बाइट डेटा होंगे ताकि हम आगे की योजना बना सकें।

एक और अर्थ यह है कि अधिकांश फाइल सिस्टम डेटा स्टोर करते हैं। अधिकांश फ़ाइल सिस्टम ब्लॉक में डेटा स्टोर करते हैं। उदाहरण के लिए, फ़ाइल सिस्टम 64kB ब्लॉक में डेटा संग्रहीत कर सकता है, जिसका अर्थ है कि यह कभी भी ऐसी किसी भी आवंटित नहीं करेगा जो 64kb का भी एकाधिक नहीं है। यह अक्षम लगता है, लेकिन यह बहीखाता को बहुत सरल बना सकता है, और अक्सर सरल मतलब तेज़ होता है।

एक तीसरा अर्थ, जिसे आप टॉगिंग कर रहे हैं, फाइल की उपस्थिति का वर्णन करने के लिए हार्डड्राइव पर आवश्यक बिट्स की वास्तविक संख्या होगी। इसमें ऐसी जानकारी शामिल होती है जो आमतौर पर फ़ाइल से अलग से संग्रहीत होती है। उदाहरण के लिए, लिनक्स में, "फ़ाइल नाम" की अवधारणा फ़ाइल युक्त निर्देशिका के लिए इनोड में संग्रहीत होती है (संपादित करें: टिप्पणियों से, तकनीकी रूप से यह निर्देशिका के डेटा में संग्रहीत होती है। जब मैंने इसे लिखा, तो मैं छोटे से सोच रहा था - डायरेक्टरी मामले। 156 बाइट से छोटे डेटा सीधे इनोड में संग्रहीत किया जा सकता है)। यह आमतौर पर उपयोग नहीं किया जाने वाला अर्थ नहीं है, क्योंकि यह आपके फ़ाइल सिस्टम की जबरदस्त गहरी आंतरिक कार्यप्रणाली को जानने के बिना निर्धारित करना बहुत मुश्किल है (क्या आपने फ़ाइल पर सभी अनुमतियों को संग्रहीत करने के लिए आवश्यक स्थान के लिए खाता किया था?)। हालांकि, अगर आपके पास 1,000,000 बाइट हार्ड ड्राइव है, और जानना चाहते हैं कि फ़ाइल उस हार्ड ड्राइव पर कितनी बड़ी फिट बैठती है, तो यह आपके लिए एक बहुत ही महत्वपूर्ण अर्थ होगा!


82
2017-09-15 17:41



"फ़ाइल युक्त निर्देशिका के लिए इनोड में" क्या आप इसका मतलब है कि इसकी इनोड की बजाय निर्देशिका का डेटा नहीं है? इनोड में फ़ाइल आकार और तिथियां हैं, लेकिन कोई नाम नहीं है ... - Medinoc
@Medinoc अच्छा बिंदु। मैं इनलाइन मामले के बारे में सोच रहा था जब यह इनोड के भीतर डेटा संग्रहीत करता था, लेकिन मैं वास्तव में यह देखने के लिए जांच नहीं करता था कि यह कितना हो सकता है! मैंने एक संपादन जोड़ा है। - Cort Ammon
सम्बंधित इनलाइन डेटा सुविधा ext4 के, यह सभी फाइल सिस्टम में सार्वभौमिक नहीं है। इसके अतिरिक्त, यह निर्देशिका इनोड पर लागू होता है, निर्देशिका नहीं। वे अलग हैं, निर्देशिकाओं में एक इनलाइन डेटा क्षमता भी है, लेकिन वे अलग-अलग विशेषताएं हैं। एक फाइल इनोड में सेट आकार होता है, कम से कम ext4 के मामले में, इसलिए अनुमतियों का डेटा उपयोग अप्रासंगिक है। फाइल डिस्क उपयोग उपयोग में फाइल सिस्टम पर काफी निर्भर है, इस उत्तर का तीसरा हिस्सा केवल ext4 पर लागू होता है, जहां तक ​​मैं कह सकता हूं, यह स्पष्ट नहीं किया गया है। - Phizes
यदि आपके पास 1,000,000 बाइट हार्ड ड्राइव है तो अपग्रेड के बारे में सोचने का समय हो सकता है। - nekomatic


फ़ाइल नाम कहीं और संग्रहीत है।

आपकी डिस्क पर "फाइल सिस्टम" होगा, यह चुनने के लिए बस एक विधि डालें कि फ़ाइल नाम और फ़ाइलों का प्रतिनिधित्व कैसे किया जाता है और भौतिक डिस्क पर व्याख्या की जाती है।

अधिकांश विंडोज डिस्क पर आप "एनटीएफएस" (नई तकनीक फाइल सिस्टम ") नामक फाइल सिस्टम का उपयोग करेंगे, यह फ़ाइल सामग्री से अलग मास्टर फ़ाइल टेबल (एमएफटी) में फ़ाइल नाम की जानकारी संग्रहीत करता है। मास्टर फ़ाइल टेबल पर विकिपीडिया लेख

इसलिए फ़ाइल स्वयं लंबाई 0 बाइट्स होगी, लेकिन एमएफटी में इसकी प्रविष्टि अभी भी कुछ जगह पर कब्जा कर लेगी।


53
2017-09-15 21:58



और एनटीएफएस के मामले में, विंडोज़ द्वारा रिपोर्ट की गई फ़ाइल का आकार और अधिकांश टूल वास्तव में इसका आकार है मुख्य धारा फ़ाइल का, जिसे हम फ़ाइल की सामग्री के रूप में देखते हैं। NTFS विभाजन पर संग्रहीत फ़ाइल अतिरिक्त रूप से संग्रहीत कुछ डेटा हो सकती है वैकल्पिक डेटा स्ट्रीम, और अभी भी रिपोर्ट का आकार है 0। यह जानने के लिए एक अच्छी फाइल सिस्टम सुविधा है कि क्या आप पूरी तस्वीर चाहते हैं :) - Paweł Bulwan


यह काफी दिलचस्प ओटोलॉजिकल सवाल है ...

फ़ाइल स्वयं फ़ाइल की सामग्री है। अगर फ़ाइल में कोई सामग्री नहीं है, तो इसका आकार शून्य है। फ़ाइल का नाम फ़ाइल का एक हिस्सा है क्योंकि आपका नाम शारीरिक रूप से आप का एक हिस्सा है (यानी, यह नहीं है)।

जैसे ही आपका नाम लोगों के सिर (और अपने स्वयं के) में एक विचार के रूप में मौजूद है जो भौतिक को संदर्भित करता है / इंगित करता है, फ़ाइल नाम फ़ाइल सिस्टम के निर्देशिका पेड़ में मौजूद है और यह फ़ाइल को संदर्भित करता है / इंगित करता है।


12
2017-09-16 14:59





(जवाब के लिए थोड़ा देर हो चुकी है ...)

उपरोक्त उत्तरों द्वारा प्रदान की गई फ़ाइल की तुलना में फ़ाइल शून्य आकार कैसे हो सकती है। प्रश्न Win7 को टैग किया गया है, लेकिन अन्य "सरल" फ़ाइल सिस्टम जैसे कि मोटी या NTFS, उपयोगी हो सकता है क्योंकि अवधारणाएं समान हैं।

डिस्क "फाइल" नहीं है और एक निर्देशिका क्या है; यह छोटे ब्लॉक में सभी डेटा है। ओएस डेटा ब्लॉक के अर्थ के बीच अंतर करता है। पहले कुछ विशेष, लेकिन शेष ब्लॉक में डेटा के बारे में जानकारी होती है (उदाहरण: फ़ाइल का नाम, फ़ाइल की लंबाई, डेटा रखने वाला पहला डेटा ब्लॉक), या डेटा स्वयं।

एक निर्देशिका एक विशेष "फ़ाइल" है जिसका ओएस समझता है "डेटा" एक सूचना ब्लॉक है जिसमें फ़ाइलों के बारे में जानकारी होती है, फाइलों की सामग्री नहीं। एक अच्छा सादृश्य एक भौतिक पुस्तकालय और कार्ड कैटलॉग है। सूचना ब्लॉक को कार्ड कैटलॉग और अलमारियों के रूप में डेटा ब्लॉक के रूप में सोचें (कार्ड कैटलॉग शेल्फ जैसी संरचना पर भी बैठता है)।

जब आप एक फ़ाइल बनाते हैं (यूनिक्स के साथ कहें touch कमांड), ओएस पहले सूचना ब्लॉक (निर्देशिका) में निम्न प्रविष्टि बनाता है:

  • नाम = My_File.txt
  • लंबाई = 0
  • डेटा ब्लॉक = एन / ए शुरू करना
  • अतिरिक्त जानकारी (मालिक, अनुमतियां, बनाई गई / अपडेट / संशोधित दिनांक), आदि

केवल अगर "लिखने" के लिए कुछ डेटा है तो क्या यह डेटा स्टोर करने के लिए खाली डेटा ब्लॉक खोजने का प्रयास करता है। लेकिन डेटा ब्लॉक डिस्क के लिए सुविधाजनक और ओएस पढ़ने के लिए सुविधाजनक आकार (32K कहें) में आते हैं। यदि आप केवल "हैलो" लिखते हैं, तो अधिकांश ब्लॉक "खाली" होता है (वास्तव में शून्य नहीं हो सकता है, लेकिन पहले से क्या कचरा हो सकता है), इसलिए तालिका अब आकार को आकार तक अपडेट करती है (5 वर्ण + अंत फ़ाइल) ताकि आपको बुरी चीजें न मिलें।

जब आप "फ़ाइल" को लंबाई> ब्लॉक आकार में अपडेट करते हैं, तो ओएस डेटा को नए ब्लॉक में लिखता है और डेटा ब्लॉक को अपडेट करता है यह कहने के लिए कि फ़ाइल अगले ब्लॉक पर जारी है (और इसी तरह) और लंबाई को अपडेट किया गया है नई लंबाई (विवरण अलग)।

डेटा ब्लॉक (चेन सामग्री) की श्रृंखलाओं के बारे में जानकारी के साथ आप डेटा डेटा ब्लॉक (निर्देशिका या सूचियों) का संग्रह करते हैं।

तर्कसंगत रूप से, यह भी बताता है कि एक ही फाइल सिस्टम पर एक फ़ाइल क्यों चलती है, जबकि एक प्रतिलिपि लंबे समय तक होती है। ओएस को केवल एक निर्देशिका (सूचना डेटा ब्लॉक) से प्रविष्टि को हटाने और दूसरे में जोड़ने के लिए 2 निर्देशिका ब्लॉक संपादित करना होगा। फ़ाइल हटाएं: फ़ाइल ब्लॉक ब्लॉक को फिर से स्थानांतरित करने के लिए, निर्देशिका ब्लॉक में प्रविष्टि को हटा दें।

पीएस: सिर्फ इसलिए कि कार्ड कैटलॉग में किसी पुस्तक के लिए प्रवेश है, इसका मतलब यह नहीं है कि यह शेल्फ पर है (शायद चेक आउट हो गया है या खो गया है); फ़ाइल का आकार 0।

पीपीएस: पुस्तकालय के अंदर एक गलत जगह पुस्तक खोज पुस्तकालय, या कंप्यूटर शर्तों में: chkdsk या मरम्मत डिस्क का तात्पर्य है!

यूनिक्स इनोड्स के बारे में पढ़कर या वर्जन कंट्रोल सिस्टम (क्लीयरकेस, टीएफएस, गिट इत्यादि) न केवल फाइलों और निर्देशिकाओं का प्रबंधन करते हैं, बल्कि फाइलों के संस्करणों और यहां तक ​​कि निर्देशिकाओं के संस्करणों का प्रबंधन करते हुए एक बड़ी समझ को समझ लिया जा सकता है। ज्यादातर मामलों में, सबकुछ डेटाबेस में संग्रहीत होता है और उपयोगकर्ता को शास्त्रीय निर्देशिका संरचना और फ़ाइलों के रूप में प्रस्तुत करने के लिए प्रस्तुत किया जाता है!


7
2017-09-16 09:55





हमारे यहां कुछ उत्कृष्ट उत्तर हैं - मैं सिर्फ तस्वीर संस्करण (एक हजार शब्द और वह सब जोड़ना चाहता हूं।)

यह मेरी एनटीएफएस-स्वरूपित हार्ड ड्राइव में से एक है जैसे कि आप डिस्क डिफ्रैगमेंटिंग टूल के साथ इसे विज़ुअलाइज़ करते हैं। एमएफटी (मास्टर फाइल टेबल) बैंगनी में दिखाया गया है:

enter image description here

वह छोटा बैंगनी वर्ग मेरे एचडी में मौजूद फाइलों की सूची का वर्णन करता है। किसी न किसी मामले में, एनटीएफएस डिस्क के लिए, सामग्री की तालिका एक पुस्तक के लिए क्या है; पृष्ठों की बजाय, यह डिस्क के बाकी हिस्सों पर उनके भौतिक स्थान को इंगित करता है1

शून्य-बाइट आकार वाले फ़ाइल को सामग्री प्रविष्टि तालिका के रूप में देखा जा सकता है जो कि किसी भी पृष्ठ को इंगित करता है:

enter image description here

प्रविष्टि वहां सूचीबद्ध है - लेकिन चूंकि कोई पृष्ठ इंगित नहीं किया गया है, हम मान सकते हैं कि सामग्री मौजूद नहीं है।

1 - निश्चित रूप से, यह उससे थोड़ा अधिक जटिल है; लेकिन क्षेत्र के नक्शे, दर्पण एमएफटी इत्यादि जैसे मुद्दे इस प्रश्न के दायरे से बाहर हैं।


4
2017-09-24 00:05





फाइल सिस्टम स्टोर बहुत जैसे फाइल के बारे में जानकारी फ़ाइल का नाम, फ़ाइल का आकार, निर्माण समय, एक्सेस समय, संशोधित समय, उपयोगकर्ता बनाया गया है, उपयोगकर्ता और समूह अनुमतियां, टुकड़े, फ़ाइल को संग्रहित करने वाले क्लस्टर, हार्ड / सॉफ्ट लिंक, विशेषताएँ ... जिन्हें बुलाया जाता है फ़ाइल मेटाडेटा। आप उन मेटाडेटा को फ़ाइल आकार में क्यों गिनते हैं जब उपयोगकर्ता इनके बारे में परवाह नहीं करते हैं और उनके बारे में नहीं जानते हैं? वे केवल फ़ाइल सामग्री के बारे में वास्तव में परवाह करते हैं

अतिरिक्त प्रत्येक फाइल सिस्टम विभिन्न प्रकार के मेटाडेटा स्टोर करता है जो डिस्क पर अलग-अलग जगह लेते हैं। उदाहरण के लिए एनटीएफएस अनुमति से POSIX अनुमतियां बहुत अलग हैं, और वहां भी हैं inode पॉज़िक्स में संख्याएं जो विंडोज़ पर मौजूद नहीं हैं। यहां तक ​​कि पीओएसआईक्स फाइल सिस्टम भी बहुत भिन्न हैं, जैसे 32-बिट ब्लॉक एड्रेस के साथ ext3, 48-बिट के साथ ext4, 128-बिट एड्रेस के साथ 64-बिट और जेएफएस के साथ बीआरटीएफ। तो आप उन मेटाडेटा को फ़ाइल आकार में कैसे गिनेंगे?

एक 100-बाइट फ़ाइल के साथ एक और उदाहरण लें जिसका मेटाडाटा वर्तमान फाइल सिस्टम पर 56 बाइट्स का उपभोग करता है। हम फ़ाइल को किसी अन्य फाइल सिस्टम में कॉपी करते हैं और अब मेटाडेटा के 128 बाइट्स लेते हैं। हालांकि फ़ाइल सामग्री बिल्कुल वही हैंबाइट्स की संख्या फाइलों में भी वही हैं। तो सिस्टम पर 156 बाइट्स के रूप में फ़ाइल आकार प्रदर्शित करना, लेकिन दूसरे पर 228 बाइट्स बहुत है उलझन में और उलझन में सहज


3
2017-09-16 09:41





का एक फ़ाइल आकार 0, यह कहने के समान है: मेरे पास एक पेपर है 5 इस पर शब्द और एक और पेपर पर, यह है 0 इस पर शब्द इसलिए 0 पूरी तरह से संभव है।

फ़ाइल का मेटा डेटा (निर्माण दिनांक समय, अंतिम संशोधित दिनांक समय, फ़ाइल स्वामी, अनुमतियां), सभी को संग्रहीत किया जाता है जहां फ़ाइल आकार के हिस्से के रूप में शामिल नहीं किया गया है।


1
2017-12-25 04:37