2010-11-26 14 views
25

के साथ सॉर्ट किया गया है, मुझे फ़ोल्डर में फ़ाइलों की एक सूची की आवश्यकता है और फ़ाइलों को उनके संशोधित दिनांक समय के साथ क्रमबद्ध किया जाता है।मैं किसी फ़ोल्डर में फ़ाइलों की एक सूची कैसे प्राप्त कर सकता हूं जिसमें फ़ाइलों को संशोधित दिनांक समय

मैं लिनक्स के तहत सी ++ के साथ काम कर रहा हूं, बूस्ट लाइब्रेरी समर्थित है।

क्या कोई मुझे इस बारे में कोड का कुछ नमूना प्रदान कर सकता है कि इसे कैसे कार्यान्वित किया जाए?

+2

यह आपके अन्य प्रश्न से अलग कैसे है: http://stackoverflow.com/questions/4279164/cboost-file-system-to-return-a-list-of-files-older-than-a- विशिष्ट- पहर? नबुलके ने आपको एक उत्तर दिया है जो आपको सही दिशा में इंगित करना चाहिए। वहां से वेक्टर में फ़ाइलों को जोड़ने और उन्हें सॉर्ट करने में बहुत मुश्किल नहीं है। – Ralf

+0

[सी ++: संभावित फ़ाइल से पुरानी फ़ाइलों की सूची लौटने के लिए बूस्ट फ़ाइल सिस्टम का संभावित डुप्लिकेट] (https://stackoverflow.com/questions/4279164/cboost-file-system-to-return-a-list-of -फाइल-पुराने-से-विशिष्ट-समय) – halfer

उत्तर

48

अधिकांश ऑपरेटिंग सिस्टम किसी भी विशेष क्रम में निर्देशिका प्रविष्टियों को वापस नहीं करते हैं। यदि आप उन्हें सॉर्ट करना चाहते हैं (आपको शायद यह करना चाहिए कि आप एक मानव उपयोगकर्ता को परिणाम दिखाने जा रहे हैं), तो आपको इसे एक अलग पास में करने की आवश्यकता है। एक तरह से आप ऐसा कर सकता है प्रविष्टियों, कुछ तो जैसे एक std::multimap में डालने के लिए है:

namespace fs = boost::filesystem; 
fs::path someDir("/path/to/somewhere"); 
fs::directory_iterator end_iter; 

typedef std::multimap<std::time_t, fs::path> result_set_t; 
result_set_t result_set; 

if (fs::exists(someDir) && fs::is_directory(someDir)) 
{ 
    for(fs::directory_iterator dir_iter(someDir) ; dir_iter != end_iter ; ++dir_iter) 
    { 
    if (fs::is_regular_file(dir_iter->status())) 
    { 
     result_set.insert(result_set_t::value_type(fs::last_write_time(dir_iter->path()), *dir_iter)); 
    } 
    } 
} 

फिर आप result_set के माध्यम से पुनरावृति कर सकते हैं और मैप की boost::filesystem::path प्रविष्टियों आरोही क्रम में हो जाएगा।

+0

यहां केवल एक नोट है कि यदि फ़ाइलों को एक ही सेकंड में बनाया/संशोधित किया गया है, तो उनके आदेश की गारंटी नहीं है, क्योंकि 'std :: time_t' दूसरे के लिए सटीक है। – fduff

+2

कृपया ध्यान दें http://www.boost.org/doc/libs/1_46_1/libs/filesystem/v3/doc/reference.html#last_write_time। last_write_time पथ को स्थिति नहीं देता है। fs :: last_write_time (dir_iter-> पथ()) – e271p314

+0

आप परिणाम_set.insert में बाएं कोष्ठक गायब हैं ... – daramarak

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

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