【问题标题】:which searching technique is implemented when we search a file using fopen() in c当我们在 c 中使用 fopen() 搜索文件时,实现了哪种搜索技术
【发布时间】:2018-10-23 01:32:06
【问题描述】:

我正在处理大量的文本文件(大约 10^5 到 10^6 个文件)。在每次迭代中,我想选择一个随机数并能够将关联文本文件的内容加载到缓冲区。

现在我的问题是使用什么样的搜索技术来定位文件?

【问题讨论】:

  • 这完全取决于您的代码运行的操作系统和文件系统,并且文件名搜索策略差异很大。无论您使用哪种编程语言,它都是一样的,与 C/C++ 无关。
  • 操作系统对包含数万个或更多文件的单个目录处理不佳的情况并不少见。一种常见且易于实现的技术是有很大帮助的,即实现分层子目录结构。例如,如果您的文件具有像 504cba1b815bc171 这样的“名称”,您可以将该文件存储在 50/4c/504cba1b815bc171
  • 一般来说,将一百万个文件放在一个目录中不太可能有好的结果。考虑另一种组织文件的方法。如果您分享一些有关文件命名约定的内容,可能有人对您有一些想法。

标签: c++ c file search


【解决方案1】:

如 cmets 中所述,它依赖于操作系统。据我所知,C 标准甚至没有提到目录。

如果您想要一种高效的搜索技术,您必须自己实现它。如果你写了很多,你可以使用操作系统来实现它,通过平均复杂度为 O(n*log(n)) 的目录层次结构进行查找。

如果主要是只读的,将文件放在单个文件中,将其视为虚拟文件系统并让您的应用程序使用您选择的任何搜索算法搜索它,它几乎一样简单且速度更快。速度来自更少的操作系统和文件系统调用。由于FILE* 在没有大的重定位或内存的情况下不能很好地就地插入,因此写入变得有点大。

【讨论】:

    猜你喜欢
    • 2010-09-12
    • 2010-11-27
    • 1970-01-01
    • 2012-07-16
    • 2011-09-24
    • 1970-01-01
    • 1970-01-01
    • 2020-12-05
    • 1970-01-01
    相关资源
    最近更新 更多