में एक निर्देशिका में इसकी सभी फ़ाइलों और इसके उपनिर्देशिकाओं पर दोबारा दोबारा दोहराएं, मैं एक दिए गए एक्सटेंशन के साथ फ़ाइलों के लिए एक निर्देशिका और इसकी सभी उप-निर्देशिकाओं को रिकर्स करना चाहता हूं - उदाहरण के लिए, सभी * .jpg फ़ाइलें। आप क्यूटी में ऐसा कैसे कर सकते हैं?कर्ट
कर्ट
उत्तर
मुझे समस्या है कि आप QDirIterator पर एक नज़र डालें।
QDirIterator it(dir, QStringList() << "*.jpg", QDir::Files, QDirIterator::Subdirectories);
while (it.hasNext())
qDebug() << it.next();
इससे एल्गोरिदम अधिक स्केलेबल बनाता है। QDir::entryList()
एक ही निर्देशिका में कई फ़ाइलों को संग्रहीत करते समय अचानक बड़ी मात्रा में स्मृति ले सकता है। छोटे एम्बेडेड उपकरणों पर अच्छा नहीं है।
मैंने आधिकारिक दस्तावेज़ों को ठीक से नहीं पढ़ने के कारण बहुत समय बर्बाद कर दिया। कृपया ध्यान दें "निर्माण के बाद, इटेटरेटर पहली निर्देशिका प्रविष्टि से पहले स्थित है। 'अगला()' फ़ंक्शन अगली निर्देशिका प्रविष्टि का मार्ग लौटाता है और इसे पुनरावृत्त करता है।" तो फाइलों से संबंधित आपका कोड 'it.next()' के बाद आना चाहिए। –
यह काम करना चाहिए:
void scanDir(QDir dir)
{
dir.setNameFilters(QStringList("*.nut"));
dir.setFilter(QDir::Files | QDir::NoDotAndDotDot | QDir::NoSymLinks);
qDebug() << "Scanning: " << dir.path();
QStringList fileList = dir.entryList();
for (int i=0; i<fileList.count(); i++)
{
if(fileList[i] != "main.nut" &&
fileList[i] != "info.nut")
{
qDebug() << "Found file: " << fileList[i];
}
}
dir.setFilter(QDir::AllDirs | QDir::NoDotAndDotDot | QDir::NoSymLinks);
QStringList dirList = dir.entryList();
for (int i=0; i<dirList.size(); ++i)
{
QString newPath = QString("%1/%2").arg(dir.absolutePath()).arg(dirList.at(i));
scanDir(QDir(newPath));
}
}
अपने कोड से मतभेद के बाद कर रहे हैं:
बजाय गहराई पहले खोज की- चौड़ाई पहले खोज (इसके लिए कोई कारण नहीं है, मैं सिर्फ यह पसंद करते हैं)
- sym लिंक
- EntryInfoList के बजाय EntryList से बचने के लिए अधिक फ़िल्टर। अगर आपको सिर्फ फाइल का नाम चाहिए तो आपको इसकी आवश्यकता नहीं है।
मैं इसे परीक्षण किया है और इसे सही ढंग से काम करता है, लेकिन सूचना के निम्नलिखित:
- यह बहुत समय लग सकता है, इसलिए धागे से यह चलाने पर विचार
- अगर वहाँ गहरी प्रत्यावर्तन है आप हो सकता है आपके स्टैक
पर विचार करना चाहेंगे जब तक कि मुझे कुछ याद नहीं आ रहा है, तो आपने उसके फ़ंक्शन का आउटपुट बदल दिया। वह दी गई निर्देशिका में सभी फाइलों की सूची चाहता है, जबकि आपका फ़ंक्शन केवल फ़ाइल नाम प्रिंट करेगा लेकिन सूची प्रदान नहीं करेगा। –
वह 'nutfiles' स्ट्रिंग सूची भर नहीं रहा था, इसलिए मैंने इस भाग को शामिल नहीं किया था। फ़ंक्शन को संशोधित करने और सभी फ़ाइलों की सूची प्राप्त करने के लिए यह बहुत आसान है – pnezis
मैंने QDirIterator का उपयोग किया।
// used to store the file paths
filesStack = new QStack<QString>();
// I use a file dialog to let the user choose the root folder to search in
if (fileDialog->exec() == QFileDialog::Accepted) {
QDir selectedDir(fileDialog->selectedFiles().first());
selectedDir.setFilter(QDir::Files |
QDir::Dirs | QDir::NoDot | QDir::NoDotDot);
QStringList qsl; qsl.append("*.xml"); // I only want XML files
selectedDir.setNameFilters(qsl);
findFilesRecursively(selectedDir);
}
// this function stores the absolute paths of each file in a QVector
void findFilesRecursively(QDir rootDir) {
QDirIterator it(rootDir, QDirIterator::Subdirectories);
while(it.hasNext()) {
filesStack->push(it.next());
}
}
संकेत के लिए हर किसी के लिए धन्यवाद:
यहाँ कैसे मैं यह कर और कितना आसान सभी XML पूर्ण फ़ाइल पथ रिकर्सिवली बहुत तेजी से (Qt4.8.1) को खोजने के लिए था।
संपादित करें: मैंने कुछ घोषणाओं को छोड़ दिया होगा, सावधान रहें।
QDirIterator से प्रदर्शन हिट से सावधान रहें। –
- 1. डब्ल्यूएसडीएल क्लाइंट एथ और एकाधिक कर्ट
- 2. एकाधिक आईपी + डोमेन + एक वेबसाइट के लिए एसएसएल कर्ट
- 3. एसएसएल हैंडशेकिंग स्व-हस्ताक्षर किए गए कर्ट और एसएसएलईजीएन (जेएसएसई)
- 4. नेट प्रोग्रामिंग: एसएसएल स्व-हस्ताक्षरित प्रमाणपत्र
- 5. रूट प्रमाणपत्र आयात किए बिना X509 प्रमाण पत्र को कैसे सत्यापित करें?
- 6. मेककर्ट टूल के साथ किए गए प्रमाण पत्र का उपयोग क्यों किया जा रहा है, उत्पादन में बुरा?
- 7. कस्टम ट्रस्टस्टोर कस्टम ट्रस्टस्टोर
- 8. क्या java_home/jre/lib/security फ़ोल्डर में निर्दिष्ट एक से अलग कैकर्ट लोड करने का कोई तरीका है?
- 9. रेल नियंत्रकों के लिए दर-सीमा
- 10. एक ही वेब ऐप में विभिन्न उपयोगकर्ताओं के लिए अलग-अलग सत्र टाइमआउट
- 11. मैं लेटेक्स में एक आकृति कैसे रख सकता हूं?
- 12. एसएसएल प्रमाणपत्रों में निर्दिष्ट समर्थित एन्क्रिप्शन शक्ति है?
- 13. डीओडी सीएसी कार्ड प्रमाण पत्र स्वीकार करने के लिए टोमकैट को कॉन्फ़िगर करना
- 14. पायथन:
- 15. सी # मैं रूट-सीए-सर्ट प्रमाणपत्र (x50 9) श्रृंखला को कैसे सत्यापित कर सकता हूं?
- 16. टोमकैट सर्वर/क्लाइंट सेल्फ-सिग्नल एसएसएल प्रमाणपत्र
- 17. प्रमाण पत्र - वे प्रमाणपत्र स्टोर में कब स्थापित होते हैं?
- 18. mysql: पोस्टफिक्स-खोज के लिए कुशल तरीका (जैसे '% text' उर्फ। Prefix वाइल्डकार्ड)?
- 19. बहु-किरायेदार वेबसाइट
- 20. सक्रिय ऐप डोमेन को सत्यापित करने के लिए कैसे मेरा ऐप चल रहा है?
- 21. जावा SSLHandshakeException सामान्य SSLEngine
- 22. जब कोई ट्रस्टमैनेजर फैक्ट्री ट्रस्टमैनेजर फैक्टरी (जावा)
- 23. X509TrustManager सभी certs की अनुमति के बिना ओवरराइड?
- 24. जावा cacert.org पर किए गए प्रमाण पर क्यों चकित करता है: "keyCertSign बिट सेट नहीं है"?
- 25. MPMoviePlayerController चार सेकंड के बाद बंद हो जाता है
- 26. एसएनआई (सर्वर नाम संकेत)
- 27. डब्ल्यूसीएफ, सुरक्षा और प्रमाणपत्र
- 28. 'मेरा "प्रमाणपत्र स्टोर कहां गया?
- 29. जावा
- 30. एक ही प्रमाणपत्र फ़ाइल में एकाधिक एपीएनएस प्रमाणपत्र
इसके अलावा, क्यूटी में एक QFileSystemModel ऑब्जेक्ट है जिसे आप – Chris