2015-09-11 4 views
5

मेरे प्रोग्राम को डिस्क पर अपनी सेटिंग्स के साथ एक पाठ (केवल कुछ पंक्तियां) फ़ाइल पढ़ने/लिखने की आवश्यकता है। कोड में पथ निर्दिष्ट करने के लिए विंडोज़ की तरह एक मंच पर अच्छी तरह से काम कर सकते हैं, लेकिन यदि यह लिनक्स पर चलता है, तो पथ क्रॉस प्लेटफॉर्म नहीं है।Qt में क्रॉस-प्लेटफ़ॉर्म तरीके से सेटिंग संग्रहण पथ कैसे प्राप्त करें?

मैं QSettings पर एक समान समाधान की तलाश में हूं जो विभिन्न पथों पर सेटिंग्स सहेजता है या इसे संभालने के अपने मूल तरीके हैं। प्रोग्रामर को विवरण के साथ करने की आवश्यकता नहीं है। लेकिन पाठ फ़ाइल QSettings में मान के रूप में सहेजने के लिए उपयुक्त नहीं है।

ऐसे पथ प्राप्त करने के लिए कोई उपयोगकर्ता इंटरैक्शन की आवश्यकता नहीं होनी चाहिए। टेक्स्ट फ़ाइल को एप्लिकेशन रीस्टार्ट पर जारी रखना चाहिए। यह एक अस्थायी फ़ाइल नहीं हो सकता है।

क्या क्यूटी में कोई मौजूदा समाधान है और एपीआई क्या उपयोग की जानी चाहिए?

उत्तर

0

QDir मंच स्वतंत्र फ़ाइल जानकारी और QDir के लिए, dirs के रास्तों को संभालने के लिए QFileInfo है homePath()

मेरा प्रस्ताव है कि इन कक्षाओं का उपयोग करें और QDir::home() या QDir::homePath() का प्रयोग कर एक निर्देशिका है जहाँ करने के लिए लिखने के लिए लगता है, के बाद से करने के लिए है उपयोगकर्ता के पास अपने घर में लिखने की अनुमति है और यह प्रत्येक प्लेटफॉर्म पर मौजूद है।

+0

'homePath' और उसके बाद क्या? विंडोज़ पर, कि'% USERPROFILE% में है 'लिखने के लिए चयन करने के लिए लिखने के लिए है, और यदि आप वहां यादृच्छिक रूप से लिखना शुरू करते हैं, तो आप परेशानी के लिए हो सकते हैं। ओएस एक्स और लिनक्स पर, यह होम निर्देशिका में है जहां आपको प्लेटफॉर्म-विशिष्ट पथ सम्मेलनों का पालन करने की आवश्यकता है। एएच उपयोगकर्ता जो आपको '~/xyz' ओएस एक्स पर आपको नापसंद करेगा। 'क्यूडीर :: होमपाथ' एक विरासत बचे हुए और अनिवार्य रूप से एक क्रॉस-प्लेटफार्म सेटिंग में लिखने के लिए बेकार है।आप वहां से पढ़ सकते हैं, लेकिन उपयोगकर्ता के बिना लिखने के लिए कहें कि आपको कहां लिखना है। –

0

यदि आप कुछ उपयोगकर्ता से संबंधित डेटा को सहेजना चाहते हैं, तो आप QDir::homePath() का उपयोग कर उपयोगकर्ता होम निर्देशिका पथ प्राप्त कर सकते हैं।

+0

... और प्लेटफ़ॉर्म-विशिष्ट कोड का एक समूह है, जहां कि घर निर्देशिका में :( –

-1

आप फ़ाइल निर्देशिका में फ़ाइल स्टोर कर सकते हैं। QCoreApplication::applicationDirPath() पर एक नज़र डालें।

क्यूटी प्रलेखन से:

निर्देशिका है कि आवेदन निष्पादन योग्य होता है देता है।

+0

यह आम तौर पर लिखने योग्य नहीं है, इसलिए यह एक बुरा विचार होगा। –

6

एप्लिकेशन-विशिष्ट सेटिंग्स संग्रहण का स्थान प्लेटफ़ॉर्म पर भिन्न होता है। क्यूटी 5 QStandardPaths के माध्यम से एक समझदार समाधान प्रदान करता है।

आम तौर पर, आप प्रति उपयोगकर्ता सेटिंग्स QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) में स्टोर करेंगे। यदि आप चाहते हैं कि सेटिंग्स विंडोज़ पर उपयोगकर्ता की रोमिंग प्रोफाइल में बने रहें, तो आप QStandardPaths::AppLocalDataLocation का उपयोग कर सकते हैं, इसका अर्थ गैर-विंडोज प्लेटफ़ॉर्म पर AppDataLocation का अर्थ है।

इससे पहले कि आप मानक रास्तों का उपयोग कर सकते हैं, तो आप QCoreApplication::setApplicationName के माध्यम से अपने आवेदन नाम सेट करना होगा, और आपके संगठन का नाम setOrganizationName या setOrganizationDomain का उपयोग कर। पथ इन पर निर्भर करेगा, इसलिए सुनिश्चित करें कि वे आपके लिए अद्वितीय हैं। यदि आपने कभी उन्हें बदल दिया है, तो आप पुरानी सेटिंग्स तक पहुंच खो देंगे, इसलिए सुनिश्चित करें कि आप नाम और डोमेन से चिपके रहें जो आपके लिए समझ में आता है।

पथ मौजूद होने की गारंटी नहीं है। यदि ऐसा नहीं होता है, तो आपको इसे स्वयं बनाना होगा, उदा। QDir::mkpath का उपयोग कर।

int main(int argc, char ** argv) { 
    QApplication app{argc, argv}; 
    app.setOrganizationDomain("stackoverflow.com"); 
    app.setApplicationName("Q32525196.A32535544"); 
    auto path = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation); 
    if (path.isEmpty()) qFatal("Cannot determine settings storage location"); 
    QDir d{path}; 
    if (d.mkpath(d.absolutePath()) && QDir::setCurrentPath(d.absolutePath())) { 
    qDebug() << "settings in" << QDir::currentPath(); 
    QFile f{"settings.txt"}; 
    if (f.open(QIODevice::WriteOnly | QIODevice::Truncate)) 
     f.write("Hello, World"); 
    } 
} 
संबंधित मुद्दे