2010-11-25 7 views
7

J'utilise la bibliothèque Boost::FileSystem avec C++ fonctionnant sous la plate-forme Linux et j'ai une question suivante:C++: système de fichiers boost pour retourner une liste de fichiers de plus un moment précis

Je voudrais avoir une liste de fichiers qui sont modifiés plus d'une date donnée. Je ne sais pas si le boost::FileSystem offrent une telle méthode que:

vector<string> listFiles = boost::FileSystem::getFiles("\directory", "01/01/2010 12:00:00"); 

Si oui, pourriez-vous s'il vous plaît fournir un exemple de code?

+0

duplication possible de [comment puis-je obtenir une liste de fichiers dans un dossier dans lequel les fichiers sont triés avec l'heure de la date de modification] (http://stackoverflow.com/questions/4283546/how-can-i-get- une liste de fichiers dans un dossier dans lequel les fichiers sont triés avec mod) – dandan78

Répondre

11

Boost :: filesystem n'offre pas une fonction exactement comme ça. Mais vous pouvez utiliser ceci:

http://www.boost.org/doc/libs/1_45_0/libs/filesystem/v3/doc/reference.html#last_write_time

comme base pour écrire votre propre. Voici quelques exemples de code utilisant last_write_time:

#include <boost/filesystem/operations.hpp> 
#include <ctime> 
#include <iostream> 

int main(int argc , char *argv[ ]) { 
    if (argc != 2) { 
     std::cerr << "Error! Syntax: moditime <filename>!\n" ; 
     return 1 ; 
    } 
    boost::filesystem::path p(argv[ 1 ]) ; 
    if (boost::filesystem::exists(p)) { 
     std::time_t t = boost::filesystem::last_write_time(p) ; 
     std::cout << "On " << std::ctime(&t) << " the file " << argv[ 1 ] 
    << " was modified the last time!\n" ; 
     std::cout << "Setting the modification time to now:\n" ; 
     std::time_t n = std::time(0) ; 
     boost::filesystem::last_write_time(p , n) ; 
     t = boost::filesystem::last_write_time(p) ; 
     std::cout << "Now the modification time is " << std::ctime(&t) << std::endl ; 
     return 0 ; 
    } else { 
     std::cout << "Could not find file " << argv[ 1 ] << '\n' ; 
     return 2 ; 
    } 
} 
+0

merci. J'ai vu cet exemple de code de Boost: fileSystem, mais comment puis-je trier les fichiers? – olidev

+1

@JoesyXHN: S'il vous plaît montrez-moi le code que vous avez obtenu jusqu'à présent, et je suis heureux de vous aider plus loin. Mais il y a des efforts à faire de votre côté. – nabulke

+1

Bonjour nabulke. J'essaie de faire quelque chose de similaire http://stackoverflow.com/q/7056882/434051, j'ai fourni une démo de code, Et je ne comprends pas ce qui ne va pas (alors que ça ressemble beaucoup au vôtre) = ( – Rella

1

Vous pouvez utiliser un std :: map (last_write_time, fileName) pour stocker le fichier dernière fois modifié et le chemin du fichier absolu et le faire une dans l'ordre traversal pour trier les données.

Questions connexes