【问题标题】:Edit file scanner to scan only first .01MB of each file编辑文件扫描器以仅扫描每个文件的前 .01MB
【发布时间】:2013-07-28 01:40:59
【问题描述】:

这个程序http://www.fourmilab.ch/random/ 扫描整个文件以确定它的信息密度(又名熵/随机性)。

我想编辑它以仅扫描文件的前 .01 MB 而不是整个文件,以加快扫描时间(我需要扫描的网络共享为 2TB)。

源包含在下载中,所以应该很容易做到;我只是不知道如何开始。

有什么想法吗?

【问题讨论】:

    标签: c file-io entropy


    【解决方案1】:

    快速浏览 ent.c 中的代码,在第 181 行显示了一个 while 语句。这一行从 fp 指向的文件执行 fgetc。为了使其正常工作,您只需在语句中添加一个计数器。类似于

    while ((my_count++ < MAX_COUNT) && ((oc = fgetc(fp)) != EOF))
    

    其中 my_count 是一个 int(或 long - 取决于您真正想要的大小),您的 MAX_COUNT 为 100000。请务必将 my_count 初始化为 0。

    【讨论】:

    • 你是说第 181 行吗?
    • 我进行了编辑,但它似乎并没有像我希望的那样影响扫描时间。例如,一个小的 .txt 文件扫描速度非常快,但一个大的 .iso 文件需要一段时间。这是我的代码的样子: /* 扫描输入文件并计算字符出现次数 */ float my_count = 0;常量 MAX_COUNT = 100000; while ((my_count++
    • .iso 文件是二进制文件,可以有很长的行。我会查看 fgetc 的返回长度。此外,尝试只做 1 行,然后 2 行、4 行、8 行,...看看它的长度。让我知道这是怎么回事。
    • MAX_COUNT 究竟指的是什么?我的印象是我们限制了要扫描的位/字节数。如果是这种情况,“线”有多长似乎并不重要。例如,我希望它只提取和扫描每个文件的前 .01MB,而不管行长如何。我如何只做 1 行、2 行等,这与将 MAX_COUNT 设置为 100000 有何不同?感谢您的帮助。
    • 啊,我明白了。行计数似乎不是将扫描大小限制为 .01MB 的最佳方法(因为,正如您所说,某些文件类型的行数可能比其他文件类型长)。您知道将其精确限制为 0.01MB 的方法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-20
    • 1970-01-01
    • 1970-01-01
    • 2013-06-16
    • 2012-07-14
    • 2015-04-21
    相关资源
    最近更新 更多