2012-08-28 13 views
6

मुझे दोबारा निर्देशिका के माध्यम से चलने के लिए क्यूटी कार्यों का उपयोग करके थोड़ा परेशानी है। मैं क्या करने की कोशिश कर रहा हूं:क्यूटी में एक निर्देशिका को दोबारा चलें, फ़ोल्डरों को छोड़ दें "।" और ".."

एक निर्दिष्ट निर्देशिका खोलें। निर्देशिका के माध्यम से वॉक, और हर बार यह एक और निर्देशिका का सामना करना पड़ता है कि निर्देशिका को खोलने, फ़ाइलों के माध्यम से चलना, आदि

अब, मैं इस बारे में जा रहा हूँ:

QString dir = QFileDialog::getExistingDirectory(this, "Select directory"); 
if(!dir.isNull()) { 
    ReadDir(dir); 
} 

void Mainwindow::ReadDir(QString path) { 
    QDir dir(path);       //Opens the path 
    QFileInfoList files = dir.entryInfoList(); //Gets the file information 
    foreach(const QFileInfo &fi, files) {  //Loops through the found files. 
     QString Path = fi.absoluteFilePath(); //Gets the absolute file path 
     if(fi.isDir()) ReadDir(Path);   //Recursively goes through all the directories. 
     else { 
      //Do stuff with the found file. 
     } 
    } 
} 

अब, वास्तविक समस्या मुझे सामना करना पड़ रहा है: स्वाभाविक रूप से, entryInfoList भी '।' और '..' निर्देशिकाएं। इस सेटअप के साथ, यह एक बड़ी समस्या साबित करता है।

'।' में जाकर, यह पूरी निर्देशिका से दो बार या यहां तक ​​कि असीमित रूप से (क्योंकि 'हमेशा' पहला तत्व होता है), '..' के साथ यह सभी फ़ोल्डरों के लिए प्रक्रिया को दोबारा कर देगा मूल निर्देशिका।

मैं यह अच्छा और चिकना करना चाहता हूं, क्या इस बारे में जाने का कोई तरीका है, मुझे पता नहीं है? या एकमात्र तरीका है, कि मुझे सादे फ़ाइल नाम (पथ के बिना) मिलता है और '।' के खिलाफ जांचें। तथा '..'?

उत्तर

12

documentation में वर्णित अनुसार, आपको entryInfoList में QDir::NoDotAndDotDot फ़िल्टर का उपयोग करने का प्रयास करना चाहिए।

संपादित

  • के रूप में वर्णित in this post, एक QDir::Files, या QDir::Dirs या QDir::AllFiles जोड़ने के लिए फ़ाइलों और/या निर्देशिका को लेने के लिए मत भूलना।

  • आप this previous question भी जांचना चाहेंगे।

+0

हाँ, और के रूप में वर्णित [यहां] (http://www.qtcentre.org/threads/19085-QDir-entryInfoList-and-NoDotAndDotDot-filter), क्यूटी QDir, और फ़िल्टर करने की जरूरत है QDir :: AllEntries के साथ विस्तारित करने की आवश्यकता है। आपको अभी भी 'सही' मिल रहा है, क्योंकि आपने मुझे सही दिशा में इंगित किया है। धन्यवाद :) – ATaylor

+0

Thx, मैंने तदनुसार जवाब अपडेट किया। –

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