C win32 - Как я могу произвольно выбрать файл из папки? - PullRequest
0 голосов
/ 08 июня 2011

У меня есть папка c: \ config , которая содержит несколько файлов конфигурации (config_x). Я хотел бы иметь возможность выбрать один из них наугад (программа написана на C). Количество файлов может измениться в будущем, поэтому необходимо иметь возможность запрашивать количество файлов в папке.

Как это можно сделать?

Ответы [ 2 ]

2 голосов
/ 08 июня 2011
  • Используйте FindFirstFile и FindNextFile для построения списка файлов в папке
  • . Создайте случайное число от 0 до количества файлов, а затем выберите этот индекс из списка

MSDN имеет пример перечисления файлов .

1 голос
/ 08 июня 2011

Используйте FindFirstFile и FindNextFile в цикле.Ведите счет того, сколько файлов вы уже видели (n).В каждом цикле случайным образом вспыхивают с вероятностью 1:n:

if(INVALID_HANDLE_VALUE!=(hFind = FindFirstFile(DirSpec, &FindFileData))) {
    for(i=0;;++i) {
        strcpy(fileChoice, FindFileData.cFileName);
        while(rand_s(&r));
        if( ((double)r) / ((double)i) < 1.0 ) break;
        if(!FindNextFile(hFind, &FindFileData)) break;
    }
}

Вы можете найти доказательство этого метода в книге «Искусство компьютерного программирования», том 2, раздел 3.4.2, Дональда Э.Кнут.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...