C win32 - 如何从文件夹中随机选择文件?

时间:2011-06-08 10:11:52

标签: c file

我有一个 c:\ config 文件夹,其中包含多个配置文件(config_x)。 我希望能够随机选择其中一个(程序用C语言编写)。 文件数量可能会在将来发生变化 - 因此需要能够查询文件夹中的文件数量。

怎么做?

2 个答案:

答案 0 :(得分:2)

  • 使用FindFirstFileFindNextFile构建文件夹
  • 中的文件列表
  • 生成介于0和文件数之间的随机数,然后从列表中选择该索引

MSDN有an example on listing files

答案 1 :(得分:1)

在循环中使用FindFirstFileFindNextFile。记住你到目前为止看到的文件数量(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;
    }
}

你可以在Donald E. Knuth的“计算机编程艺术,第2卷,第3.4.2节”中找到这种方法的证明。