2012-05-22 10 views

उत्तर

18

उत्तर: हां, फ़ाइल सूचक की स्थिति पढ़ने के बाद स्वचालित रूप से अपडेट हो जाती है, ताकि लगातार fread() फ़ंक्शंस लगातार फ़ाइल रिकॉर्ड पढ़ सकें।

स्पष्टीकरण:fread() एक ब्लॉक उन्मुख फ़ंक्शन है। मानक प्रोटोटाइप है:

size_t fread(void *ptr, 
      size_t size, 
      size_t limit, 
      FILE *stream); 

समारोह पढ़ता से धारा stream द्वारा की ओर इशारा किया और स्थानों बाइट्स सरणी में पढ़ा ptr द्वारा की ओर इशारा किया, यह पढ़ने जब निम्नलिखित शर्तों के किसी भी सत्य हैं बंद हो जाएगा:

  • यह आकार size की limit तत्वों, या
  • यह फ़ाइल के अंत तक पहुँच जाता है, या
  • एक पढ़ा है पढ़ा त्रुटि तब होती है।

fread() आप fgetc() जितना नियंत्रण देता है, और एक एकल आई/ओ आपरेशन में एक से अधिक चरित्र को पढ़ने में सक्षम होने का लाभ है। वास्तव में, स्मृति अनुमति, आप पूरी फ़ाइल को सरणी में पढ़ सकते हैं और अपनी सभी प्रोसेसिंग मेमोरी में कर सकते हैं। इसमें महत्वपूर्ण प्रदर्शन फायदे हैं।

fread() अक्सर फिक्स्ड-लम्बाई डेटा रिकॉर्ड्स को सीधे structs में पढ़ने के लिए उपयोग किया जाता है, लेकिन आप इसे किसी भी फ़ाइल को पढ़ने के लिए उपयोग कर सकते हैं। अधिकांश डिस्क फ़ाइलों को पढ़ने के लिए यह मेरी निजी पसंद है।

+0

आह, धन्यवाद। मैं सोच रहा था कि फाइल पॉइंटर को दोबारा बदलने के लिए fseek का उपयोग करना होगा। – Richard

+12

यह उत्तर वास्तव में उस प्रश्न को संबोधित नहीं करता है जो पूछा गया था कि फ़ाइल सूचक के साथ क्या होता है, जो कि मेरी समझ के अनुसार –

+0

पर कॉल करने के बाद होता है, उसने स्पष्टता के लिए पूछा कि यह क्यों हो रहा है ..... – Addicted

28

हां, कॉलिंग फ़्रेड वास्तव में फ़ाइल सूचक को स्थानांतरित करता है। फ़ाइल पॉइंटर वास्तव में पढ़ने वाले बाइट्स की संख्या से उन्नत होगा। फ्रेड में त्रुटि के मामले में, फ़्रेड कॉल करने के बाद फ़ाइल स्थिति निर्दिष्ट नहीं है।

2

हां, fp बाइट्स की कुल मात्रा द्वारा उन्नत किया जाएगा।
आपके मामले में समारोह , fread पढ़ता sizeBlock वस्तुओं, प्रत्येक sizeof(Reg) बाइट्स लंबे से धारा fp द्वारा की ओर इशारा किया, उन्हें ArrayA द्वारा दिए गए स्थान पर भंडारण।

0

हाँ, यह करता है। यह आदेश वर्तमान स्थिति को दिखाने के लिए ftell() समारोह से चेक किया जा सकता है (वास्तव में, अब तक पढ़े गए बाइट), एक नज़र ले लो: उत्तर के लिए

int main() { 

    typedef struct person { 
     char *nome; int age; 
    } person; 

    // write struct to file 2x or more... 

    FILE *file = fopen(filename, "rb"); 
    person p; 
    size_t byteslength = sizeof(struct person); 

    printf("ftell: %ld\n", ftell(file)); 
    fread(&p, byteslength, 1, file); 
    printf("name: %s | age: %d\n", p.nome, p.idade); 

    printf("ftell: %ld\n", ftell(file)); 
    fread(&p, byteslength, 1, file); 
    printf("name: %s | age: %d\n", p.nome, p.idade); 

    //... 

    fclose(file); 

    return 0; 
} 
संबंधित मुद्दे

 संबंधित मुद्दे