मैं भी (कि fopen सत्यापित कर सकते हैं) सही ढंग से काम करता है, लेकिन नहीं अगर आप एप्लिकेशन के संसाधनों या संपत्ति फ़ोल्डर में फ़ाइल तक पहुंचने का प्रयास कर रहा है। मैं सलाह देता हूं कि पहिया को फिर से शुरू करने से बचने के लिए, आप संपत्तियों फ़ोल्डर में अपने ऐप के साथ भेजे गए किसी भी संपत्ति को चिपकाते हैं, जहां उन्हें वितरण के लिए पैक किया जाएगा।
संपत्ति फ़ोल्डर मामले में आपको दो चीज़ों में से एक करने की आवश्यकता है, इस पर निर्भर करता है कि फ़ाइल पैकेजर द्वारा संपीड़ित की गई थी या नहीं। दोनों AssetManager विधियों का उपयोग करते हैं, और आप संदर्भ/ऐप से AssetManager प्राप्त कर सकते हैं। फ़ाइल नाम हमेशा संपत्ति फ़ोल्डर से संबंधित होते हैं, btw: अगर आपके पास संपत्ति फ़ोल्डर में सीधे "foo.png" फ़ाइल है, तो आप "foo.png," नहीं "संपत्ति/foo.png" जैसे कुछ खोलेंगे। ।
फ़ाइल संकुचित नहीं किया गया था (यानी, यह एक्सटेंशन कि संकुचित नहीं मिलता है, .png तरह से एक है), तो आप AssetManager.openFd (से एक फ़ाइल वर्णनकर्ता) मिलता है और करने के लिए इसे पारित कर सकते हैं सी ++। फिर आप fdopen (डुप्लिकेट (एफडी), "आर") का उपयोग कर सकते हैं; फाइल को फ़ाइल के रूप में खोलने के लिए *। ध्यान दें कि ऑफसेट में fseek() होना चाहिए, और फ़ाइल की लंबाई का ट्रैक रखें। आपको वास्तव में संपूर्ण संपत्ति पैकेज में फ़ाइल हैंडल मिल रहा है, और आपकी रुचि की फ़ाइल केवल एक छोटा सा हिस्सा है।
यदि आपकी फ़ाइल संपीड़ित है, तो आपको जावा स्ट्रीमिंग रीडर का उपयोग करने की आवश्यकता है: AssetManager.open() आपको एक इनपुटस्ट्रीम देता है, आप फ़ाइल को पढ़ने में उपयोग कर सकते हैं। यह एक पिटा है क्योंकि आप क्वेरी नहीं कर सकते (AFAIK) फ़ाइल का आकार; मैं अपने परिसंपत्ति फ़ोल्डर पर एक प्रीप्रोकैसिंग चरण चलाता हूं जो सभी फाइलों की सूची को उनके संबंधित आकारों से उत्पन्न करता है, इसलिए मैं जान सकता हूं, उदाहरण के लिए, बफर का कितना बड़ा आवंटन करना है।
आपकी फ़ाइल एक संसाधन है, तो आप इसे उपयोग करने के लिए संसाधन वर्ग के माध्यम से जाना, ऐसा लगता है, हालांकि संसाधन भी एक ही संपत्ति पैकेज में पैक किया जाता है की आवश्यकता हो सकती। संसाधन के पास ओपनआरओ रिसोर्स() कॉल है जो इनपुटस्ट्रीम और ओपनआरओआरसोर्सएफडी() कॉल को फ़ाइल डिस्क्रिप्टर प्राप्त करने के लिए कॉल करता है, जैसा ऊपर है।
शुभकामनाएं।
क्षमा करें इसे अपडेट करना भूल गया। समस्या की जड़ को पढ़ने/लिखने की अनुमति नहीं मिल रही थी। एसडीकार्ड घुड़सवार होने और फिर इसमें एक फ़ाइल खोलने की कोशिश कर एक समान समस्या भी हो सकती है। – RyanCheu
मैं आपके साथ एक ही समस्या आती हूं, क्या आपने इसे हल किया है? –