2012-06-20 23 views
5

मेरे पास एक डीएलएल है जो एक स्ट्रीम में डेटा आउटपुट करता है। लेकिन यह एक पोस्टफिक्स और उपसर्ग जोड़ता है जो मैं नहीं चाहता हूं। मैं मेमोरीस्ट्रीम बना सकता हूं, डीएलएल डेटा को आउटपुट करने दें और फिर इसे ट्रिम करें, लेकिन कुछ जीबी डेटा हो सकता है, इसलिए मैं इसे सीधे फाइल (फाइलस्ट्रीम) में सहेजना चाहता हूं। मुझे लगता है कि सबसे अच्छा समाधान स्वयं स्ट्रीम क्लास बनाना है। तो मैं बनाया:स्ट्रीम के अंत का पता लगाने के लिए कैसे?

function TFileStream2.Write(const Buffer; Count: Integer): Longint; 

जहाँ मैं स्थिति की जाँच करें और अगर यह = 0 है तो मैं बफर से पहले कुछ बाइट्स त्यागें। इस तरह से मैं फ़ाइल की शुरुआत को ट्रिम कर सकता हूं। लेकिन मैं स्ट्रीम के अंत का पता कैसे लगा सकता हूं ताकि मैं अंत से कुछ बाइटों को त्याग सकूं?

उत्तर

6

जब स्ट्रीम ऑब्जेक्ट नष्ट हो जाता है, तो बस फ़ाइल के अंतिम भाग को ट्रिम करें। आप Size संपत्ति को संशोधित करके ऐसा कर सकते हैं।

+0

लेकिन मुझे लगता है कि बाइट पहले ही डिस्क पर सहेजे गए हैं। क्या फाइल को इस तरह छोटा किया जा सकता है? – Tom

+0

यह काम किया! बहुत बहुत धन्यवाद, डेविड! – Tom