2016-07-02 3 views
5

QIODevice में से QFile में QFileDevice::FileHandleFlag तर्क में पुन: कार्यान्वित किया गया है। इसके लिए प्रलेखन पर एक नज़र डालने के विवरण के विपरीत दो विकल्प हैं।क्यूटी ऑटो बंद फाइलें करता है?

QFileDevice documentation से

:

  • QFileDevice::AutoCloseHandle - आवेदन है फ़ाइल में खुला() पास() द्वारा बंद कर दिया जाना चाहिए पारित कर दिया संभाल, डिफ़ॉल्ट व्यवहार कि करीब सिर्फ फ़ाइल flushes जाता है और फ़ाइल हैंडल बंद करने के लिए जिम्मेदार है। नाम से फ़ाइल खोलते समय, इस ध्वज को अनदेखा किया जाता है क्योंकि क्यूटी हमेशा फाइल हैंडल का मालिक होता है और इसे बंद करना होगा।

  • QFileDevice::DontCloseHandle - अगर स्पष्ट रूप से बंद नहीं किया गया है, तो QFile ऑब्जेक्ट नष्ट होने पर अंतर्निहित फ़ाइल हैंडल खुला रहता है।

तो क्यूटी ऑटो करीब फ़ाइलों करता है या नहीं और इस विकल्प को वास्तव में कुछ भी बदलने की स्थापना करता है?

+3

डोंटक्लोस हैंडल तब होता है जब एप्लिकेशन * पहले खोले * हैंडल और क्यूटी पिग्गी-बैक को आपूर्ति करता है। इस मामले में आवेदन (क्यूटी नहीं) जीवन भर के स्वामित्व को बनाए रखना चाहता है। इसकी तुलना करें "* नाम से फ़ाइल खोलते समय *, इस ध्वज को अनदेखा किया जाता है * क्यूटी हमेशा फाइल हैंडल का मालिक है * और इसे बंद करना होगा।" – user2864740

उत्तर

5

क्यूटी स्रोत को देखने के बाद मुझे QFSFileEngine.cpp:378* में रेखा मिली जो आखिरकार ध्वज का उपयोग करती है।

QFile::open() एक मौजूदा (stdio.h) FILE हैंडलर जो क्यूटी द्वारा नहीं बनाया गया है और स्वचालित रूप क्यूटी से नहीं बंद किया जाना चाहिए पारित किया जा सकता। क्यूटी द्वारा खोले गए विपरीत फाइलों में क्यूटी द्वारा स्वचालित रूप से बंद कर दिया जाता है।

QFileDevice::FileHandleFlag ध्वज पूर्व मामले के लिए है और प्रोग्रामर को यह निर्दिष्ट करने की अनुमति देता है कि QFile को इस तथ्य को अनदेखा करना चाहिए कि यह Qt द्वारा खोला नहीं गया था। closeFileHandle के लिए


* खोजें अगर लाइन नंबर से मेल नहीं खाता।

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