दिलचस्प पोस्ट
आप जावास्क्रिप्ट के साथ सी.एस.एस. नियम मानों को कैसे पढ़ते हैं? फ़ाइल इनपुट वैल्यू को प्रोग्रामैटिक रूप से कैसे सेट करें (यानी: ड्रैग-ड्रॉपिंग फाइलें)? दो छवियों की तुलना करने के लिए एल्गोरिदम सी # में "variable! = Null" के बजाय एक बार "नल! = चर" क्यों दिखता है? लैम्ब्डा कार्यों और उनके मापदंडों का दायरा? मैं लोगो में कछुए को कैसे स्थानांतरित करूं? एसस। एससीएसएस: नेस्टिंग और कई वर्गों? वास्तव में जावा ईई क्या है? क्या Google Chrome में xpath प्राप्त करने का कोई तरीका है? मैं एक एक्सप्रेस आवेदन में JSON POST डेटा का उपयोग कैसे करूँ? मैं स्रोत से एक आर पैकेज कैसे स्थापित करूं? एक इंटरफ़ेस को कार्यान्वित करने वाले जावा वर्गों का पता लगाएं क्या 'अस्थिर' कीवर्ड में एक कंसोल फंक्शन द्वारा संशोधित होने की अनुमति देने के अलावा कोई अन्य उद्देश्य है? टूलबार पर डिफ़ॉल्ट रूप से कोई छाया नहीं है? एंड्रॉइड छविदृश्य ज़ूम इन और ज़ूम-आउट

मैं सी में फ़ाइल का आकार कैसे प्राप्त करूं?

संभव डुप्लिकेट:
आप सी में एक फ़ाइल के आकार का निर्धारण कैसे करते हैं?

मैं एक फ़ाइल का आकार कैसे पा सकता हूँ? मैंने सी में लिखा एक आवेदन के साथ खोला। मैं आकार जानना चाहूंा, क्योंकि मुझे लोड की गई सामग्री को स्ट्रिंग में रखना है, जिसे मैं मैलोक malloc() का इस्तेमाल करके आवंटित करना चाहता हूं। बस malloc(10000*sizeof(char)); लेखन malloc(10000*sizeof(char)); IMHO एक बुरा विचार है

वेब के समाधान से एकत्रित समाधान "मैं सी में फ़ाइल का आकार कैसे प्राप्त करूं?"

आपको फ़ाइल के अंत की तलाश करना चाहिए और फिर स्थिति के लिए पूछना होगा:

 fseek(fp, 0L, SEEK_END); sz = ftell(fp); 

आप फिर से खोज सकते हैं, जैसे:

 fseek(fp, 0L, SEEK_SET); 

या (यदि शुरुआत में जाने की मांग है)

 rewind(fp); 

मानक पुस्तकालय का उपयोग करना:

मान लें कि आपका क्रियान्वयन अर्थपूर्ण रूप से समर्थन करता है SEEK_END:

 fseek(f, 0, SEEK_END); // seek to end of file size = ftell(f); // get current file pointer fseek(f, 0, SEEK_SET); // seek back to beginning of file // proceed with allocating memory and reading the file 

लिनक्स / POSIX:

आप stat उपयोग कर सकते हैं (यदि आप फ़ाइल नाम जानते हैं), या fstat (यदि आपके पास फ़ाइल विवरणक है)।

यहां स्टेट के लिए एक उदाहरण है:

 #include <sys/stat.h> struct stat st; stat(filename, &st); size = st.st_size; 

Win32:

आप GetFileSize या GetFileSizeEx का उपयोग कर सकते हैं

यदि आपके पास फाइल डिस्क्रिप्टर है तो fstat() एक स्टेट संरचना देता है जिसमें फ़ाइल का आकार होता है।

 #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> // fd = fileno(f); //if you have a stream (eg from fopen), not a file descriptor. struct stat buf; fstat(fd, &buf); int size = buf.st_size; 

क्या आपने फ़ाइल आकार की गणना नहीं की है और यदि आवश्यक हो तो सरणी बढ़ रही है? यहां एक उदाहरण है (त्रुटि जांचने के साथ)

 #define CHUNK 1024 /* Read the contents of a file into a buffer. Return the size of the file * and set buf to point to a buffer allocated with malloc that contains * the file contents. */ int read_file(FILE *fp, char **buf) { int n, np; char *b, *b2; n = CHUNK; np = n; b = malloc(sizeof(char)*n); while ((r = fread(b, sizeof(char), CHUNK, fp)) > 0) { n += r; if (np - n < CHUNK) { np *= 2; // buffer is too small, the next read could overflow! b2 = malloc(np*sizeof(char)); memcpy(b2, b, n * sizeof(char)); free(b); b = b2; } } *buf = b; return n; } 

इसमें नदियों के लिए भी काम करने का फायदा है जिसमें फ़ाइल आकार (जैसे stdin) प्राप्त करना असंभव है।

यदि आप लिनक्स पर हैं, तो gibb से g_file_get_contents फ़ंक्शन का उपयोग करके गंभीरता से विचार करें। यह फ़ाइल को लोड करने, स्मृति आवंटन, और त्रुटियों को संभालने के लिए सभी कोड को संभालता है।

मैं सिर्फ एक छोटा और मीठा fsize फ़ंक्शन बना रहा (नोट, कोई त्रुटि जाँच नहीं)

 int fsize(FILE *fp){ int prev=ftell(fp); fseek(fp, 0L, SEEK_END); int sz=ftell(fp); fseek(fp,prev,SEEK_SET); //go back to where we were return sz; } 

यह मूर्खतापूर्ण है कि मानक सी लाइब्रेरी में ऐसा फ़ंक्शन नहीं है, लेकिन मैं देख सकता हूं कि हर "फ़ाइल" के आकार का आकार (उदाहरण के लिए /dev/null )

 #include <stdio.h> int main(void) { FILE *fp; char filename[80]; long length; printf("input file name:"); gets(filename); fp=fopen(filename,"rb"); if(fp==NULL) { printf("file not found!\n"); } else { fseek(fp,OL,SEEK_END); length=ftell(fp); printf("the file's length is %1dB\n",length); fclose(fp); } return 0; } 
 #include <stdio.h> #define MAXNUMBER 1024 int main() { int i; char a[MAXNUMBER]; FILE *fp = popen("du -b /bin/bash", "r"); while((a[i++] = getc(fp))!= 9) ; a[i] ='\0'; printf(" a is %s\n", a); pclose(fp); return 0; } 

HTH