c - 从文件系统中随机选择一个文件

标签 c linux filesystems

这个问题与Simulating file system access有关.

我需要随机选择文件和目录作为重命名、写入、读取等文件操作的参数。我打算做的是列出所有文件和目录及其路径并从中随机选择列表。但是,随着在实际文件系统中创建和删除文件和目录,列表也必须更新。我发现维护列表并以这种方式更新它是低效的,而且它还必须是原子的,以便后面的操作不会访问被前一个操作删除的文件。

你能建议一种不同的选择文件的方法吗……也许可以直接从文件系统中选择……但是我们怎么知道文件的路径呢。

谢谢

我在这里发现了一些有趣的东西 Randomly selecting a file from a tree of directories in a completely fair manner特别是在 Michael J. Barber 的回答,但由于我对 python 的无知而无法完全理解

最佳答案

当文件系统就在那里时,您不想维护一个文件列表。您应该能够直接从 C 执行此操作。从根目录开始,从中选择一个随机文件。你可以选择一个随机的最大深度,如果你击中了一个常规文件,在这个时间或之前使用它。如果它是一个目录,重复到最大深度。如果它是一个特殊文件,可能会重新开始。

这应该很快。该操作不必是原子的。如果您要执行操作时该文件不存在,请重试。应该不会太复杂。您可以在找到目标文件时构建路径。这将比直接使用 fs 更简单(我假设你的意思是在更低的层次上)并且应该很容易实现。

关于c - 从文件系统中随机选择一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7279657/

相关文章:

c++ - 找到执行文件的目录?

ios - iOS-用户能否访问App Bundle内容(特别是Bundle资源)

结构赋值可以像 memmove() 那样重叠,还是像 memcpy() 这样的结构赋值?

c++ - 为什么 C++ 禁止 void* 的隐式转换?

linux - 无法从 kubernetes pod 挂载 azure 文件共享(在本地计算机上工作正常)

python - os.mkdir(linux_path) 在 Windows 中运行时不会抛出错误

linux - 估计或测量创建文件的 iops 数量

objective-c - 静态内联函数调用之间静态变量的地址变化

C 忽略返回值

linux - CentOS 6.9 yum 和 yum 更新都不起作用