К оглавлению

Список файлов в каталоге

С.И.Хашин


bwin.h - заголовочный файл
bwin.cpp - реализация.

В этом модуле реализуется одна-единственная фунция:

void GetFileNames(const std::string& path, const std::string& mask, std::vector<std::string>& file_names);

Она записывает в file_names все имена файлов в каталоге path удовлетворяющие маске.

Внимание! Не забудьте подключить строки и вектора:

#include <string>
#include <vector>

Например, пусть каталог C:\t\170606\ содержит файлы:

1.txt
russian буквы.txt
two words.txt
русские буквы.txt
русский.txt

Рассмотрим следующий код:

    vector<string>&fnames;
    string fname;
    char *path = "C:\\t\\170606\\";
    GetFileNames(path, "*.txt", fnames);
    FILE *f = fopen("dir.txt", "w");
    for (unsigned i = 0; i < fnames.size(); i++) {
        fname = path;
        fname += fnames[i];
        fprintf(f, " %s, \n", fname.c_str());
    }
    fclose(f);

Если в настройке проекта

Project->Properties->Configuration Properties ->General -> Character set
выбрано "Use Multi-Byte Character Set", то в файле dir.txt окажется текст (в кодировке cp-1251):
 C:\t\170606\1.txt, 
 C:\t\170606\russian буквы.txt, 
 C:\t\170606\two words.txt, 
 C:\t\170606\русские буквы.txt, 
 C:\t\170606\русский.txt, 

Если же в настройка проекта выбрано "Use Unicode Character Set", то в файле dir.txt окажется текст:

 C:\t\170606\1.txt, 
 C:\t\170606\russian 1C:2K.txt, 
 C:\t\170606\two words.txt, 
 C:\t\170606\@CAA:85 1C:2K.txt, 
 C:\t\170606\@CAA:89.txt, 

Конечно, с этим можно бороться и победить, но мне (пока) не требуется.

В общем, будьте осторожны с русскими буквами в именах файлов!

К оглавлению


free counters