में बाइनरी फ़ाइल पढ़ें मैं सी # का उपयोग कर बाइनरी डेटा पढ़ने की कोशिश कर रहा हूं। मेरे पास उन फ़ाइलों में डेटा के लेआउट के बारे में सारी जानकारी है जिन्हें मैं पढ़ना चाहता हूं। मैं डेटा को "खंड द्वारा खंडित" पढ़ने में सक्षम हूं, यानी डेटा के पहले 40 बाइट्स को इसे स्ट्रिंग में परिवर्तित करने में सक्षम हूं, अगले 40 बाइट प्राप्त करें।एक संरचना
चूंकि डेटा के कम से कम तीन थोड़ा अलग संस्करण हैं, इसलिए मैं सीधे डेटा को डेटा में पढ़ना चाहता हूं। यह "रेखा से लाइन" पढ़ने से बस इतना अधिक सही लगता है।
मैं निम्नलिखित दृष्टिकोण की कोशिश की लेकिन कोई लाभ नहीं हुआ है:
StructType aStruct;
int count = Marshal.SizeOf(typeof(StructType));
byte[] readBuffer = new byte[count];
BinaryReader reader = new BinaryReader(stream);
readBuffer = reader.ReadBytes(count);
GCHandle handle = GCHandle.Alloc(readBuffer, GCHandleType.Pinned);
aStruct = (StructType) Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(StructType));
handle.Free();
धारा एक खोला FileStream जहाँ से मैं से पढ़ना शुरू किया गया है। Marshal.PtrToStructure
का उपयोग करते समय मुझे AccessViolationExceptio
एन मिलता है।
स्ट्रीम में पढ़ने की कोशिश करने की तुलना में अधिक जानकारी शामिल है क्योंकि मुझे फ़ाइल के अंत में डेटा में दिलचस्पी नहीं है।
[StructLayout(LayoutKind.Explicit)]
struct StructType
{
[FieldOffset(0)]
public string FileDate;
[FieldOffset(8)]
public string FileTime;
[FieldOffset(16)]
public int Id1;
[FieldOffset(20)]
public string Id2;
}
उदाहरण कोड मूल से बदल गया है इस सवाल का कम करने के लिए:
struct की तरह परिभाषित किया गया है।
मैं फ़ाइल से संरचना में बाइनरी डेटा कैसे पढ़ूं?
बाइनरीफॉर्मेटर के पास बाइनरी डेटा के लिए अपना प्रारूप है - यदि आप डेटा को स्वयं पढ़ रहे/लिख रहे हैं तो ठीक है। उपयोगी नहीं है अगर आप किसी अन्य स्रोत से फ़ाइल प्राप्त कर रहे हैं। – russau