पूरी फ़ाइल को पढ़ने के बिना किसी निश्चित ऑफसेट से फ़ाइल की जांच करना

मैं जो करना चाहता हूं वह एक फ़ाइल खोलता है (जो बहुत बड़ा है) और बाइट्स के एक निश्चित बिंदु से ऑफसेट तक पढ़ा जाता है।

सी # में यह किया जा सकता है:

File.ReadAllBytes(file).Skip(50).Take(10).ToArray();

इसके साथ समस्या यह है कि यह पूरी फाइल को पढ़ता है लेकिन चूंकि मेरी फाइलों को गले लगाया जा सकता है, इसमें भी काफी समय लगता है। क्या इस विधि से संबंधित फाइल के कुछ हिस्सों को पढ़ने का कोई तरीका है लेकिन पूरी फाइल पढ़ने के बिना? सी में अधिमानतः

0
तलाश या fseek फ़ंक्शंस देखें।
जोड़ा लेखक Rohan, स्रोत

1 उत्तर

हां, fseek() मानक लाइब्रेरी फ़ंक्शन को स्थानांतरित करने के लिए उपयोग करें ("तलाश") वांछित स्थिति में:

FILE *in = fopen("myfancyfile.dat", "rb");
if(fseek(in, 50, SEEK_SET) == 0)
{
  char buf[10];
  if(fread(buf, sizeof buf, 1, in) == 1)
  {
    /* got the data, process it here */
  }
}
fclose(in);
3
जोड़ा
त्वरित उत्तर के लिए thx मेरी फाइल 200gb से अधिक बड़ा हो सकता है। मेरा प्रोग्राम केवल लिनक्स पर ही चलाएगा, इसलिए शायद यह कोई समस्या नहीं है?
जोड़ा लेखक user3021085, स्रोत
यह ध्यान देने योग्य है कि यदि आपकी फ़ाइल बहुत बड़ी है (> 2 जीबी), और आप 32 बिट विंडोज़ एप्लिकेशन का उपयोग कर रहे हैं, तो यह दृष्टिकोण काम नहीं करेगा यदि आपको 2 जीबी चिह्न से पहले की तलाश करनी है, क्योंकि 32 बिट लंबी int नहीं होगी वांछित ऑफसेट पकड़ने में सक्षम हो। जैसा कि इस प्रश्न में उल्लिखित है, आपको एक अलग दृष्टिकोण की आवश्यकता होगी: stackoverflow.com/questions/4003405/…
जोड़ा लेखक Baldrick, स्रोत
यह 32 बिट लिनक्स के लिए भी एक समस्या होगी। यह उत्तर आपकी मदद भी कर सकता है। यह बिल्कुल वही है जो आपको चाहिए, और विंडोज और लिनक्स को कवर करता है: stackoverflow.com/a/8875668/2609288 अधिक जानकारी 32 बिट लिनक्स के तहत सी से बड़ी फ़ाइल हैंडलिंग यहां हैं: stackoverflow.com/questions/1035657/…
जोड़ा लेखक Baldrick, स्रोत