2010-11-15 3 views
1

Je ne suis pas familier avec C++ car je suis un développeur C#.C++: comment puis-je obtenir la liste des dossiers

Dans mon projet, j'ai besoin de supprimer tous les dossiers d'une semaine avant. En C++, comment puis-je obtenir la liste des dossiers d'une semaine avant en fonction de la date du système en cours?

Je travaille sur Eclipse IDE sous Ubuntu 10.10.

Si vous pouviez fournir un échantillon de code, ce serait génial.

Merci d'avance et votre aide est très appréciée!

+0

Une plate-forme particulière? –

+0

Il n'y a pas de façon indépendante de la plate-forme d'obtenir des méta-informations sur le système de fichiers, vous devrez donc spécifier une plateforme ... –

+1

@Oli, il n'y en a pas? : P –

Répondre

5

Boost:

#include <boost/foreach.hpp> 
#include <boost/filesystem.hpp> 

int main(int, char**) 
{ 
    time_t one_week_ago = std::time(NULL) - (7 * 24 * 3600); 

    boost::filesystem::directory_iterator dir("/tmp"), end; 

    BOOST_FOREACH(const boost::filesystem::path& p, std::make_pair(dir, end)) 
     if(boost::filesystem::is_directory(p)) 
      if(boost::filesystem::last_write_time(p) < one_week_ago) 
       boost::filesystem::remove_all(p); 
} 

ou sans utiliser boost :: foreach

#include <boost/filesystem.hpp> 

int main(int, char**) 
{ 
    time_t one_week_ago = std::time(NULL) - (7 * 24 * 3600); 

    boost::filesystem::directory_iterator dir("/tmp"), it, end; 

    for(it = dir; it != end; it++) 
    { 
     const boost::filesystem::path& p = *it; 
     if(boost::filesystem::is_directory(p)) 
      if(boost::filesystem::last_write_time(p) < one_week_ago) 
       boost::filesystem::remove_all(p); 
    } 
} 
+0

Salut chris, merci pour votre exemple, pourriez-vous s'il vous plaît aidez-moi à le réécrire comme pour l'instruction() au lieu de foreach()? – olidev

+0

Vous pouvez utiliser 'std :: remove_copy_if' pour créer une copie de la liste des répertoires, en ignorant les répertoires les plus récents. Ensuite, utilisez 'std :: for_each' pour supprimer les anciens répertoires restants. – MSalters

5

Il s'agit plus d'une question d'API OS que de C++. C++ lui-même ne fournit aucune fonctionnalité pour les opérations de système de fichiers. Cependant, il existe plusieurs bibliothèques portables qui le font, par exemple boost::filesystem. Cependant, si vous êtes bloqué uniquement sur un système d'exploitation, il est plus facile d'utiliser ses fonctionnalités - POSIX sur * nixes ou WinAPI sous Windows.

Les deux sont basés sur C, pour obtenir une solution C++, vous avez besoin d'une bibliothèque tierce.

Sur Linux, ce qui suit pourrait vous aider à démarrer:

0

J'aurais pensé que vous devriez regarder les fonctions opendir et readdir - regardez aussi stat. Fondamentalement, ouvrez le répertoire de niveau supérieur et examinez toutes les entrées qui sont des répertoires. La fonction stat pourra vous donner accès et modifier les heures.

Questions connexes