?? ws_save_web.h
字號:
/*************************************************** Copyright(C), 2008 , JUST File name: ws_save_web.h Author: StevenZ Version: 1.0 Date: 080930 Description: 點(diǎn)劃式網(wǎng)頁瀏覽器保存網(wǎng)頁功能 History: 080726 完成保存功能 080930 保存方式改為直接保存分析后的網(wǎng)頁 ***************************************************/#ifndef _WS_SAVE_WEB_H#define _WS_SAVE_WEB_H#include "ws_share_func.h"//公用的相關(guān)函數(shù)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);}/*遞歸保存分析過后的網(wǎng)頁*/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) {/*為頭結(jié)點(diǎn)時(shí),text為空,寫入會(huì)斷錯(cuò)誤*/ 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); }}/*網(wǎng)頁數(shù)據(jù)標(biāo)記*/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); /*保存網(wǎng)頁標(biāo)題*/ write(s_fd,wd->title,strlen(wd->title)+1); /*保存網(wǎng)頁ip信息*/ write(s_fd,wd->ip_port,strlen(wd->ip_port)+1); /*保存總結(jié)點(diǎn)數(shù)*/ 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); /*保存網(wǎng)頁內(nèi)容*/ /*遍歷并編號*/ 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);}/*保存當(dāng)前網(wǎng)頁內(nèi)容*/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
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -