读配置文件的问题

linux_6 2010-09-07 10:30:00
哪位大哥帮我写一段代码?谢谢了!
问题描述如下:
这里有一个文件,文件名为res.tmp, 文件的内容大致如下:

HTTP/1.1 200 OK
x-amz-id-2: 0JyU0vplRfktQK7UM4U1/vU5ivCeeJr35wvD6dr5Qg7zJSi2o61DWPn2HIe3GtDQ
x-amz-request-id: 45F82E21E6C93CD7
-----------这里省略了几行--------------------
Date: Tue, 07 Sep 2010 14:11:31 GMT
Last-Modified: Mon, 30 Aug 2010 02:24:46 GMT
Content-Length: "df7aba564cc65f7841b07981b346dc21"
Content-Type: binary/octet-stream
Content-Length: 5046743
Server: AmazonS3


我想实现的是把文件中的Last-Modified和Content-Length标记的value值读出来存入一个结构体变量里,譬如放到struct header head里, 使得 header.Last-Modified = Mon, 30 Aug 2010 02:24:46 GMT, header.Content-Length=5046743。

我调式了一下午都没有弄出来,要么出现段错误要么读不到所要的值,差距啊!哪位大侠能帮我写一段容错性高的代码, 万分感激!!
...全文
105 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Rain208 2010-09-08
  • 打赏
  • 举报
回复
最好是格式化成一个结构体,或者使用xml存储配置文件。
这样可以直接使用xml解析器解析

或者一行行读出来,然后判断。

赵4老师 2010-09-08
  • 打赏
  • 举报
回复
看看‘说到’和‘做到’的距离有多远?
//有一个文件,文件名为res.tmp, 文件的内容大致如下:
//HTTP/1.1 200 OK
//x-amz-id-2: 0JyU0vplRfktQK7UM4U1/vU5ivCeeJr35wvD6dr5Qg7zJSi2o61DWPn2HIe3GtDQ
//x-amz-request-id: 45F82E21E6C93CD7
//-----------这里省略了几行--------------------
//Date: Tue, 07 Sep 2010 14:11:31 GMT
//Last-Modified: Mon, 30 Aug 2010 02:24:46 GMT
//Content-Length: "df7aba564cc65f7841b07981b346dc21"
//Content-Type: binary/octet-stream
//Content-Length: 5046743
//Server: AmazonS3
//
//我想实现的是把文件中的Last-Modified和Content-Length标记的value值读出来存入一个结构体变量里,
//譬如放到struct header head里, 使得
//header.Last_Modified = Mon, 30 Aug 2010 02:24:46 GMT
//header.Content_Length=5046743
#include <stdio.h>
#include <string.h>
struct head {
char Last_Modified[30];
unsigned long Content_Length;
} header;
FILE *f;
#define MAXLN 256
char ln[MAXLN];
unsigned long n;
char s[MAXLN];
unsigned long len;
int main() {
f=fopen("res.tmp","r");
if (NULL==f) {
printf("Can not open res.tmp!\n");
return 1;
}
n=0;
while (1) {
if (NULL==fgets(ln,MAXLN,f)) break;
if (NULL==strchr(ln,'\n')) {
while (1) {
if (NULL==fgets(ln,MAXLN,f)) break;
if (NULL!=strchr(ln,'\n')) break;
}
if (feof(f)) break;
else {
n++;
printf("%lu SKIP long (>%d characters) line\n",n,MAXLN);
continue;
}
} else {
n++;
if (1==sscanf(ln,"Last-Modified: %[^\n]",s)) {
strncpy(header.Last_Modified,s,29);header.Last_Modified[29]=0;
printf("%lu OK to read Last-Modified: %s\n",n,header.Last_Modified);
} else if (1==sscanf(ln,"Content-Length: %lu",&len)) {
header.Content_Length=len;
printf("%lu OK to read Content-Length: %lu\n",n,header.Content_Length);
} else {
printf("%lu\n",n);
}
}
}
fclose(f);
return 0;
}
dsxge123 2010-09-08
  • 打赏
  • 举报
回复
好狠好
canshui 2010-09-08
  • 打赏
  • 举报
回复
bang ding
justkk 2010-09-08
  • 打赏
  • 举报
回复
应该不麻烦吧,打开文件逐行读
判断读取的内容是否与Last-Modified或Content-Length匹配,然后分别放入不同的变量
关闭文件
ok
Thirty 2010-09-08
  • 打赏
  • 举报
回复
你配置文件内容不多
1、打开文件
2、读到缓冲区
3、处理缓冲区,用strstr找到你要的地方,等等方法
4、赋值到结构

应该没问题了
向立天 2010-09-08
  • 打赏
  • 举报
回复
把你的代码贴出来看看
让大家帮你改改
你这样找人估计没人愿意做免费劳动力吧
linux_6 2010-09-08
  • 打赏
  • 举报
回复
郁闷啊! 没人回复
纯c写ini配置文件 用c/c++写ini配置文件有不少第三方的开源库,如iniparser、libini、rwini、UltraLightINIParser等,但都不理想,往往代码较大、功能较弱、 接口使用不方便。尤其在大小写处理、前后空格、各种注释、跨平台换行符支持、带引号字符串处理、无section操作、原格式保持等方面存在问题。 现将本人精心制作的ini写程序源码奉献给大家,纯c编写,简洁好用。支持windows和linux。 主要特点: 1、支持;和#注释符号,支持行尾注释。 2、支持带引号'或"成对匹配的字符串,提取时自动去引号。引号中可带其它引号或;#注释符。 3、支持无section或空section(名称为空)。 4、支持10、16、8进制数,0x开头为16进制数,0开头为8进制。 5、支持section、key或=号前后带空格。 6、支持\n、\r、\r\n或\n\r换行格式。 7、不区分section、key大小写,但写入时以新串为准,并保持其大小写。 8、新增数据时,若section存在则在该节最后一个有效数据后添加,否则在文件尾部添加。 9、支持指定key所在整行删除,即删除该键值,包括注释。 10、可自动跳过格式错误行,修改时仍然保留。 11、修改时保留原注释:包括整行注释、行尾注释(包括前面空格)。 12、修改时保留原空行。以上三点主要是尽量保留原格式。 不足之处: 1、不支持单key多value(逗号分割),只能一次性提取后自行处理。 2、不支持同名重复section和key。(重复section可视为错误,重复key则可能造成分歧) 3、不能提取所有section或key名称。 使用只需两个文件inirw.h、inirw.c,另有测试程序和工程文件,支持windows和linux。

70,040

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧