📄 ws_save_web.h
字号:
/*************************************************** Copyright(C), 2008 , JUST File name: ws_save_web.h Author: StevenZ Version: 1.0 Date: 080930 Description: 点划式网页浏览器保存网页功能 History: 080726 完成保存功能 080930 保存方式改为直接保存分析后的网页 ***************************************************/#ifndef _WS_SAVE_WEB_H#define _WS_SAVE_WEB_H#include "ws_share_func.h"//公用的相关函数void wdt_make_filename(struct Web_Data *wd,char sn[256]);void wdt_save_webtmp(char *sn);//void wtl_traverse_save(struct web_text_list*wtlptr,int *s_fd);//void wtl_traverse_number(struct web_text_list*wtlptr,int *flag);//void wdt_save(struct Web_Data *wd,char sn[]);void do_web_save(struct websitedata *wsd);/*save_name=title+日期+.wdt,保存的名字生成*/void wdt_make_filename(struct Web_Data *wd,char sn[256]){ time_t tt; char *ttemp; time(&tt); localtime(&tt); ttemp=ctime(&tt); ttemp[strlen(ttemp)-1]='\0'; strcpy(sn,wd->title); strcat(sn," "); strcat(sn,ttemp); strcat(sn,".wdt");}/*直接保存分析后的文件*/void wdt_save_webtmp(char *sn){ FILE *r_fp,*w_fp; char c; r_fp=fopen(WEB_SAVE_R,"r+"); if(NULL==r_fp) { printf("can't open file %s\n",WEB_SAVE_R); exit(1); } w_fp=fopen(sn,"w+"); if(NULL==w_fp) { printf("can't open file %s\n",sn); exit(1); } while(c=fgetc(r_fp)!=EOF) { fputc(c,w_fp); } fclose(r_fp); fclose(w_fp);}/*递归保存分析过后的网页*/void wtl_traverse_save(struct web_text_list*wtlptr,int *s_fd){ int temp,i,j; char t1[5],t2[5],t3[10]; if(wtlptr->child) wtl_traverse_save(wtlptr->child,s_fd); if(wtlptr->next) wtl_traverse_save(wtlptr->next,s_fd); temp=wtlptr->tflag; for(i=0;1;i++)/*int to string*/ { t2[i]='0'+temp%10; temp/=10; if(temp==0) break; } for(j=0;i>=0;i--,j++) { t1[j]=t2[i]; } t1[j]='\0'; DPRINTF("wtlptr->tflag=%d\n",wtlptr->tflag); DPRINTF("t1=%s\n",t1); write(*s_fd,t1,j+1); if(wtlptr->tflag<1) {/*为头结点时,text为空,写入会断错误*/ write(*s_fd,wtlptr->text,strlen(wtlptr->text)+1); } if(wtlptr->prev) { strcpy(t3,"b"); temp=wtlptr->prev->sflag; for(i=0;1;i++) { t2[i]='0'+temp%10; temp/=10; if(temp==0) break; } for(j=0;i>=0;i--,j++) { t1[j]=t2[i]; } t1[j]='\0'; DPRINTF("wtlptr->prev->sflag=%d\n",wtlptr->prev->sflag); DPRINTF("t1=%s\n",t1); strcat(t3,t1); DPRINTF("t3=%s\n",t3); write(*s_fd,t3,strlen(t3)+1); return; } else if(wtlptr->parent) { strcpy(t3,"p"); temp=wtlptr->parent->sflag; for(i=0;1;i++) { t2[i]='0'+temp%10; temp/=10; if(temp==0) break; } for(j=0;i>=0;i--,j++) { t1[j]=t2[i]; } t1[j]='\0'; DPRINTF("wtlptr->parent->sflag=%s\n",t1); strcat(t3,t1); DPRINTF("t3=%s\n",t3); write(*s_fd,t3,strlen(t3)+1); return; } else { strcpy(t3,"h"); temp=wtlptr->sflag; for(i=0;1;i++) { t2[i]='0'+temp%10; temp/=10; if(temp==0) break; } for(j=0;i>=0;i--,j++) { t1[j]=t2[i]; } t1[j]='\0'; strcat(t3,t1); DPRINTF("t3=%s\n",t3); write(*s_fd,t3,strlen(t3)+1); }}/*网页数据标记*/void wtl_traverse_number(struct web_text_list*wtlptr,int *flag){ if(wtlptr->child) wtl_traverse_number(wtlptr->child,flag); if(wtlptr->next) wtl_traverse_number(wtlptr->next,flag); wtlptr->sflag=*flag; DPRINTF("flag=%d\n",*flag); (*flag)++;}/*开始保存*/void wdt_save(struct Web_Data *wd,char sn[]){ int s_fd; int flag=0,temp,i,j; char t1[5],t2[5]; DPRINTF("save_name=%s\n",sn); s_fd=open(sn,O_WRONLY|O_CREAT|O_TRUNC); if(s_fd<0) { printf("file %s can't open!!",sn); return; } DPRINTF("s_fd=%d\n",s_fd); /*保存网页标题*/ write(s_fd,wd->title,strlen(wd->title)+1); /*保存网页ip信息*/ write(s_fd,wd->ip_port,strlen(wd->ip_port)+1); /*保存总结点数*/ DPRINTF("wd->text_list_head->tflag=%d\n",wd->text_list_head->tflag); temp=wd->text_list_head->tflag; for(i=0;1;i++) { t2[i]='0'+temp%10; temp/=10; if(temp==0) break; } for(j=0;i>=0;i--,j++) { t1[j]=t2[i]; } t1[j]='\0'; write(s_fd,t1,j+1); /*保存网页内容*/ /*遍历并编号*/ DPRINTF("traverse_number start!\n"); wtl_traverse_number(wd->text_list_head,&flag); DPRINTF("traverse_number end!\n"); /*遍历并保存*/ DPRINTF("traverse_save start!\n"); wtl_traverse_save(wd->text_list_head,&s_fd); DPRINTF("traverse_save end!\n"); close(s_fd);}/*保存当前网页内容*/void do_web_save(struct websitedata *wsd){ struct Web_Data *wd=&wsd->web_data[wsd->website_head]; char save_name[256]; ShowBitmap(240,200,BGBMPSAVE); DPRINTF("web saving...\n"); /*切换工作目录,注意有没有wdt文件夹*/ chdir("./wdt"); DPRINTF("dir changed!\n"); /*决定保存的文件名*/ wdt_make_filename(wd,save_name); DPRINTF("wdt make name!\n"); /*开始保存*/ wdt_save_webtmp(save_name);/*直接保存分析后的文件*/ //wdt_save(wd,save_name); //DPRINTF("wdt saved!\n"); /*切回工作目录*/ chdir(".."); DPRINTF("dir change back!\n"); DPRINTF("web saved!!\n"); ClearBitmap(240,200,BGBMPSAVE,BGBMPMAIN);}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -