Поскольку они - вещи, которые будут обычно происходить. Исключениями не являются механизмы потока управления. Пользователи часто понимают пароли превратно, это не исключительный случай. Исключениями должна быть действительно редкая вещь, UserHasDiedAtKeyboard
ситуации с типом.
Ссылка на setargv.obj
(или wsetargv.obj
) и argv [] будет объединена для вас аналогично тому, как это делают оболочки Unix :
Я не могу ручаться за то, насколько хорошо он это делает.
Возможно, сейчас есть способ получше, но в прошлый раз, когда мне пришлось иметь дело с этой проблемой, я закончил тем, что включил библиотеку регулярных выражений Генри Спенсера , статически связанную с моей программой (его библиотека имеет лицензию BSD), а затем я создал класс-оболочку, который преобразовал глобальные выражения пользователя в регулярные выражения для передачи в код регулярного выражения. Вы можете просмотреть / получить класс-оболочку здесь , если хотите.
После того, как вы разместили эти части, последнее, что нужно сделать, это фактически прочитать каталог и передать имя каждой записи в соответствующую функцию чтобы увидеть, соответствует ли оно выражению или нет. Имена файлов, которые совпадают, вы добавляете к своему вектору; те, которые вы не выбрасываете. Чтение каталога довольно просто сделать с помощью функций DOS _findfirst () и _findnext (),
Эхв. Мне пришлось реализовать что-то подобное в ANSI C около 15 лет назад. Думаю, начнем с процедур ANSI opendir / readdir. Globs - это не совсем регулярные выражения, поэтому вам придется реализовать собственную фильтрацию.
Это очень специфично для Windows. Я не знаю, как бы вы написали это для кроссплатформенности. Но я использовал это в программах Windows, и у меня это хорошо работает.
// Change to the specified working directory
string path;
cout << "Enter the path to report: ";
cin >> path;
_chdir(path.c_str());
// Get the file description
string desc;
cout << "Enter the file description: ";
cin >> desc;
// List the files in the directory
intptr_t file;
_finddata_t filedata;
file = _findfirst(desc.c_str(),&filedata);
if (file != -1)
{
do
{
cout << filedata.name << endl;
// Or put the file name in a vector here
} while (_findnext(file,&filedata) == 0);
}
else
{
cout << "No described files found" << endl;
}
_findclose(file);
поговаривали о его наличии в Boost :: filesystem, но от него отказались в пользу использования boost :: regex.
Для Win32 specific (MFC) вы можете использовать CFileFind класс