सरल उत्तर है नहीं:
FILE* file = fopen("Plop");
fseek(file, 0, SEEK_END);
size_t size = ftell(file); // This is the size of the file.
// But note it is in bytes.
// Also note if you are reading it into memory this is
// is the value you want unless you plan to dynamically
// convert the character encoding as you read.
fseek(file, 0, SEEK_SET); // Move the position back to the start.
सी ++ में धारा ही कार्यक्षमता है। अधिक सटीक, यह सिस्टम निर्भर है: यूनिक्स के तहत, यह संभव है (उदा। stat
का उपयोग करना); विंडोज के तहत, यह टेक्स्ट फ़ाइल के लिए संभव नहीं है, लेकिन यदि आप बाइनरी में फ़ाइल पढ़ रहे हैं, पर कोई फ़ंक्शन GetFileSize
है जिसका उपयोग किया जा सकता है।
हालांकि कार्यान्वयन मुझे पता है ( के लिए इन दो प्लेटफार्मों) के सभी के तहत, इसकी गारंटी नहीं, फ़ाइल के अंत की मांग है, तो एक ftell
कर रही है, कुछ वापस आ जाएगी, जो जब एक पर्याप्त बड़े अभिन्न करने के लिए परिवर्तित टाइप करें, उपरोक्त के समान परिणाम देगा ( समान प्रतिबंधों के साथ)।
अंत में: आपको इस जानकारी की आवश्यकता क्यों है? यदि यह उचित रूप से आकार का बफर आवंटित करने के लिए है, तो टेक्स्ट फ़ाइल के साथ, GetFileSize
(और tell
अंत करने के बाद) एक बाइट्स की संख्या से थोड़ा अधिक वापस लौटाएगा। आप बफर थोड़ा oversized हो जाएगा, लेकिन यह आमतौर पर एक समस्या नहीं है।
स्रोत
2012-02-03 16:49:28
शुद्ध मानक सी ++ में, या ऑपरेटिंग सिस्टम विशिष्ट एपीआई ठीक है? गैर पोर्टेबल फ़ंक्शन हैं (उदाहरण के लिए ['GetFileSizeEx()'] (http://msdn.microsoft.com/en-us/library/windows/desktop/aa364957 (v = vs.85) .aspx)) प्राप्त करने के लिए फाइलों का आकार। –
आपका मतलब फ़ाइल का आकार प्राप्त करना है? –
वैसे यह होमवर्क है और मुझे एपीआई का उपयोग करने की अनुमति नहीं है। मुझे केवल iostream और fstream फ़ंक्शंस का उपयोग करने की अनुमति है। तार भी नहीं। – SpeedBirdNine