आप QFile बजाय std :: fstream इस्तेमाल कर सकते हैं।
QFile file(qString);
वैकल्पिक रूप से एक चार में QString परिवर्तित * इस प्रकार है:
std::ifstream file(qString.toLatin1().data());
QString में है UTF-16 तो यह बदल जाती है toLatin1() यहाँ लेकिन QString toUtf8 सहित विभिन्न रूपांतरण की एक जोड़ी है() (अपनी फाइल-सिस्टम जांचें जो यह यूटीएफ -8 का उपयोग कर सकता है)।
जैसा कि ऊपर @ 0 ए0 डी द्वारा नोट किया गया है: क्यूबीटेएरे की स्थानीय प्रति प्राप्त किए बिना char * को एक चर में स्टोर करें।
char const* fileName = qString.toLatin1().data();
std::ifstream file(fileName); // fileName not valid here.
ऐसा इसलिए है क्योंकिLatin1() QByteArray का ऑब्जेक्ट देता है। चूंकि यह वास्तव में एक चर के लिए बाध्य नहीं है, यह एक अस्थायी है जो अभिव्यक्ति के अंत में नष्ट हो जाता है। इस प्रकार डेटा() पर कॉल एक आंतरिक संरचना में एक सूचक लौटाता है जो ';' के बाद मौजूद नहीं है।
स्रोत
2011-03-31 20:55:29
मुझे लगता है कि शब्द बदलने की जरूरत है। कथन 'const char * c_str2 = str2.toLatin1() डेटा();' ठीक काम करना चाहिए। दुर्भाग्य से ';' के बाद toLatin1() द्वारा निर्मित अस्थायी QByteArray को नष्ट कर दिया गया है, इसलिए अब c_str2' में एक अमान्य सूचक है। इसके विपरीत आप इसे 'doStuff (str2.toLatin1() डेटा()) में उपयोग कर सकते हैं;' QByteArray को ';' तक नष्ट नहीं किया जाता है इस प्रकार: 'printf (" str2:% s ", str2.toLatin1() डेटा()); 'ठीक होना चाहिए। –
@ मार्टिन: मैं सिर्फ क्यूटी उद्धृत कर रहा हूं। –
यह। मैंने आजकल आधा क्यूबाइटएरे नष्ट होने की वजह से एक समस्या को डीबग करने में बिताया है। बाइट सरणी को स्टोर करना एक वास्तविक दर्द है, लेकिन ऐसा लगता है कि यह आवश्यक है। – misha