读配置文件的问题

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。

我调式了一下午都没有弄出来,要么出现段错误要么读不到所要的值,差距啊!哪位大侠能帮我写一段容错性高的代码, 万分感激!!
...全文
87 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
  • 打赏
  • 举报
回复
郁闷啊! 没人回复

69,370

社区成员

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

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