2012-09-03 11 views
8

में फ़ाइल बनाएं मैं यहां सादा सी में थोड़ा प्रोग्राम लिख रहा हूं। मुझे जो चाहिए वह सीधे फ़ाइल के अंदर फ़ाइल बनाने के लिए है (हार्ड डिस्क पर लिखी नहीं) वर्तमान में मैं फ़ाइल को लिखने के लिए fopen("filename.txt,"wb") का उपयोग कर सकता हूं।सी - मेमोरी

मुझे पता है कि लिनक्स में आप fmemopen() का उपयोग कर सकते हैं। Win32 के लिए एक समान समाधान है?

+1

क्यों? क्या आप उम्मीद करते हैं कि फ़ाइल से पढ़ने के लिए 'फ्रेड()' जैसे नियमित 'फ़ाइल * 'I/O फ़ंक्शंस का उपयोग करने में सक्षम होना चाहिए/एक बार बनाया गया है? – unwind

+1

आप क्या हल करने की कोशिश कर रहे हैं? आपका अंतिम लक्ष्य क्या है? – jweyrich

उत्तर

0

मैं फॉपेन का उपयोग नहीं करता क्योंकि यह फ़ाइल बनाता है।

मेमोरी में फ़ाइल बनाने के लिए आपको फ़ाइल बनाने और इसे फिट करने के तरीके को स्टोर करने की आवश्यकता होगी।

आपको कुछ डेटाटाइप की एक सरणी बनाने की आवश्यकता होगी। मैं char * का उपयोग करता हूं लेकिन आप जो भी आप इम्प्रोर्मेशन को एन्कोड करना चाहते हैं उसका उपयोग कर सकते हैं। फिर आप सरणी में जानकारी जोड़कर फ़ाइल को पढ़ और लिख सकते हैं।

+0

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

+0

@ जे नैश: फाइल पॉइंटर्स पूरी तरह से कार्यान्वित हैं और संकलकों में पोर्टेबल नहीं हैं। यदि बाहरी प्रोग्राम स्वयं आंतरिक रूप से फ़ाइल करता है तो मैं नहीं देख सकता कि यह आपके प्रोग्राम को कैसे प्रभावित करेगा। – Clifford

+0

क्षमा करें मैंने पूरी तरह से व्याख्या नहीं की है, मैं मौजूदा प्रोग्राम में एन्क्रिप्शन जोड़ रहा हूं, जो काफी जटिल है। यह डिस्क पर मौजूद इनपुट फ़ाइलों को पढ़ता है। वर्तमान में मैं उन फ़ाइलों को पहले एन्क्रिप्ट कर रहा हूं, और अपने प्रोग्राम के अंदर वापस डिक्रिप्ट कर रहा हूं- हालांकि यह अस्थायी "खुली अनियंत्रित" फाइलें बनाता है जो सुरक्षित समाधान नहीं है। धन्यवाद –

0

आप MapViewOfFile के साथ कुछ हासिल कर सकते हैं। Win32 एपीआई आप इस के लिए उपयोग करना चाहिए रहे हैं:

CreateFile(...)

CreateFileMapping(...)

MapViewOfFile(...)

भूल unmap और करीब फ़ाइल मानचित्रण करने के लिए नहीं है एक बार आप कर रहे हैं।

+0

क्या सादे सी कंसोल ऐप के लिए उपलब्ध फ़ंक्शन उपलब्ध हैं? –

+0

Win32 एक सादा सी एपीआई है। आपको Windows SDK इंस्टॉल करने की आवश्यकता होगी और एमएसडीएन पृष्ठों पर निर्दिष्ट सही शीर्षलेख फ़ाइलों को शामिल करना सुनिश्चित करें, मैंने – Indy9000

+0

को लिंक किया है वर्चुअल मेमोरी में फ़ाइल को मैप करने के लिए आपको 'CreateFile' की आवश्यकता नहीं है,' INVALID_HANDLE_VALUE' के फ़ाइल हैंडल का उपयोग करें) -1) 'CreateFileMapping' में। – cdarke

0

ऐसी कार्यक्षमता विंडोज में आंतरिक रूप से समर्थित नहीं है। हालांकि आप फ़ाइल के बजाय मेमोरी बफर तक पहुंचने के लिए उच्च स्तरीय स्टडीओ फ़ंक्शंस को फिर से लिख सकते हैं, या केवल stdio-like फ़ंक्शंस को कार्यान्वित कर सकते हैं। या आप RAM disk को कार्यान्वित कर सकते हैं, हालांकि RAM डिस्क ड्राइवर को स्थापित करने से आप "डिस्क पर लिखना नहीं" नियम को पूरा नहीं कर सकते हैं।

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