SORU
10 AĞUSTOS 2009, PAZARTESİ


Boost ile bir dizin yineleme dosyaları için bir maske kullanabilir miyim?

Bir dizin "somefiles*.gibi bir şey eşleşen tüm dosyalar üzerinde yineleme istiyorum". txt Boost::dosya sisteminin bir şeyler yapmak için yerleşik, ya da bir düzenli ifade ya da her yaprak karşı bir şey gerekir mi()?

CEVAP
11 AĞUSTOS 2009, Salı


EDİT: Açıklamalarda belirtildiği gibi, aşağıdaki kod boost::filesystem Sürüm v3 öncesi için geçerlidir. İçin v3, yorum önerileri bakın.


boost::filesystem joker arama yok, dosyaları kendiniz filtre var.

Bu kod örneği boost::filesystemile bir dizinin içeriği'nın 4 ** boost::regex ile filtreleme: . ayıklanıyor

const std::string target_path( "/my/directory/" );
const boost::regex my_filter( "somefiles.*\.txt" );

std::vector< std::string > all_matching_files;

boost::filesystem::directory_iterator end_itr; // Default ctor yields past-the-end
for( boost::filesystem::directory_iterator i( target_path ); i != end_itr;   i )
{
    // Skip if not a file
    if( !boost::filesystem::is_regular_file( i->status() ) ) continue;

    boost::smatch what;

    // Skip if no match
    if( !boost::regex_match( i->leaf(), what, my_filter ) ) continue;

    // File matches, store it
    all_matching_files.push_back( i->leaf() );
}

Eğer yerleşik dizin ile kullanıma hazır bir sınıf filtre arıyorsanız (.*.* 7 Qt) bakabilirsiniz

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Joseph Herscher

    Joseph Hersc

    14 Mart 2007
  • Muse

    Muse

    28 EYLÜL 2006
  • Roger Huffman

    Roger Huffma

    4 ŞUBAT 2007