从C中的文件行中提取信息

时间:2011-09-05 04:33:27

标签: c file md5 extract

我想从一个校验和文件中提取文件名及其相应的MD5总和,格式如下 -

MD5(FreeBSD-8.2-RELEASE-amd64-bootonly.iso)= 2587cb3d466ed19a7dc77624540b0f72

我更喜欢在程序中本地执行此操作,这会排除awk等。

3 个答案:

答案 0 :(得分:0)

您应该可以使用fopen()fgets()strchr()来实现这一点 - 但首先您需要更准确地确定文件的格式(例如:会发生什么如果文件名包含)个字符?)

答案 1 :(得分:0)

我不会在大多数语言中提倡它,但为什么不用POSIX regex来提及它呢?

答案 2 :(得分:0)

您可以使用fgets()轻松阅读线条。甚至不要考虑使用gets()

如果你有理由相信你不会处理包含空格或括号的文件名,你可以使用sscanf()来提取点点滴滴:

char hash_type[16];
char file_name[1024];
char hash_value[128];

if (sscanf(line, "%15s (%1023s) = %127s", hash_type, file_name, hash_value) == 3)
    ...good to go...
else
    ...something went wrong...

注意sscanf()字符串中指定的大小与变量定义的比较;除了使用snprintf()创建格式字符串之外,没有一种简单的方法可以概括:

char format[32];
snprintf(format, sizeof(format), "%%1%zus )%%%zus) = %%%zus",
         sizeof(hash_type)-1, sizeof(file_name)-1, sizeof(hash_value)-1);

你的替代方案是一些常规的正向解析,以便在文件名开始之前找到哈希类型和开括号,以及一些棘手的向后解析,跳过哈希值并找到等于和最后一个右括号,然后收集各个部分。