首页 > 编程资源分享区 > C/C++源代码共享 > 原创:一段将google书签导入到ie收藏夹的小程序
2007
12-19

原创:一段将google书签导入到ie收藏夹的小程序

首先感谢“碧蓝右耳”帮我查看做这个练习时候的内存分配问题


这个程序很小,由于时间仓促可能会存在问题,如果存在问题请直接回复帖子,希望能修改好bug,这个程序还不能完全称为自动处理,因为它必须首先获得手动导出的GoogleBookmarks.html文件,这点很抱歉,等有空在试着把程序写成插件或自动处理的思路,暂时就写成这样,别见笑。


程序如下:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>


#define BUFSIZE 1024
#define TRUE 1
#define FALSE 0


int position;
int state;
char *intercept;
char chs[2];
char *user;
char *url;
char *urlName;


/*
 函数名:读取GoogleBookmarks函数
 功能:读取GoogleBookmarks中的内容
 参数列表:
         char *filename 文件名
 返回值:void
*/
void readgmk(char *filename);


/*
 函数名:解析格式函数
 功能:解析GoogleBookmarks格式
 参数列表:
         char *line 文件名
 返回值:void
*/
void analyseFormat(char *line);


/*
 函数名:判断字符串包含函数
 功能:判断字符串1中是否包含字符串2
 参数列表:
         char *s1 字符串1
         char *s2 字符串2
 返回值:int 1为true  0为false
*/
int isCharsContain(char *s1,char *s2);


/*
 函数名:判断字符串位置函数
 功能:判断字符串2在字符串1中的首次出现位置
 参数列表:
         char *s1 字符串1
         char *s2 字符串2
 返回值:int 位置信息从0开始,没找到返回-1
*/
int getCharsPosition(char *s1,char *s2);


/*
 函数名:判断字符串相等函数
 功能:判断字符串1和字符串2相等
 参数列表:
         char *s1 字符串1
         char *s2 字符串2
 返回值:int 1为true  0为false
*/
int isCharsEquals(char *s1,char *s2);


/*
 函数名:截取子字符串函数
 功能:截取字符串中从开始位置到结束位置的子串
 参数列表:
         char *str 字符串
         int start 开始位置,从0开始
         int end 结束位置
 返回值:截取后的字符串
*/
char *interceptChars(char *str,int start,int end);


/*
 函数名:字符转字符串函数
 功能:将字符转化为字符串
 参数列表:
         char ch 字符
 返回值:转换后字符串
*/
char *char2chars(char ch);


/*
 函数名:保存DAT文件函数
 功能:保存到DAT文件内
 参数列表:
         char *str 字符串
 返回值:void
*/
void saveDat(char *str);


/*
 函数名:删除DAT文件函数
 功能:删除DAT文件
 参数列表:
         void
 返回值:void
*/
void delDat();


/*
 函数名:读取DAT文件函数
 功能:读取DAT文件
 参数列表:
         void
 返回值:void
*/
void readDat();


/*
 函数名:创建URl文件函数
 功能:创建URL文件
 参数列表:
         char *fullpath 完整路径名
         char *content  url文件内容
 返回值:void
*/
void createUrl(char *fullpath,char *content);


/*
 函数名:获得当前登录用户函数
 功能:获得当前登录用户名
 参数列表:
         void
 返回值:当前登录用户名
*/
char *getLoginUser();


/*
 函数名:拼装URL函数
 功能:拼装URL文件所在完整路径
 参数列表:
         void
 返回值:当前登录用户名
*/
char *spellUrl();


/*
 函数名:获得URL文件名函数
 功能:获得URL文件名
 参数列表:
         char *str
 返回值:URL文件名
*/
char *getUrlName(char *str);


/*
 函数名:下载Bookmarks函数
 功能:下载GoogleBookmarks.html
 参数列表:
         void
 返回值:void
*/
void downloadBookmarks();


void run(){
  char srcpath[BUFSIZE],click;
  lable:
  printf(“\n收藏夹转换小程序,目的是将GoogleBookmarks导入到Internet Explorer收藏夹,本程序功能相对简单,如发生意外问题,请谅解。”);
  printf(“\n准备下载GoogleBookmarks.html到本地,下载前请首先保证您已经登录了GoogleBookmarks”);
  printf(“\n确认已经登录了吗?y/n:”);
  scanf(“%c”,&click);
  if(click==’y'){
    downloadBookmarks();
    printf(“\n请输入GoogleBookmarks.html存放的路径:”);
    scanf(“%s”,srcpath);
    printf(“\n准备将GoogleBookmarks中收藏导入到Internet Explorer收藏中……”);
    delDat();
    readgmk(srcpath);
    readDat();
    printf(“\n成功导入到Internet Explorer收藏夹”);
  }else if(click==’n'){
    printf(“\n请先登录GoogleBookmarks\n”);
    goto lable;
  }
}


int main(void){
  run();
}


void downloadBookmarks(){
  char *website;
  website=”http://www.google.com/bookmarks/bookmarks.html“;
  ShellExecute(NULL, “open”, website, NULL, NULL, SW_SHOWNORMAL);
}


void readgmk(char *filename){
  char tmp[BUFSIZE];
  FILE *fp;
  if((fp=fopen(filename,”r”))==NULL){
    printf(“读取gmark文件失败”);
    exit(1);
  }else{
    while(fgets(tmp,BUFSIZE,fp)!=NULL){
      analyseFormat(tmp);
    }
  }
  fclose(fp);
}


void analyseFormat(char *line){
  int local1,local2,local3;
  char *str1,*str2,*str3;
  if(isCharsContain(line,”HREF”)==TRUE){
    local1=getCharsPosition(line,”HREF”);
    str1=interceptChars(line,local1,strlen(line));
    local2=getCharsPosition(str1,”\”");
    str2=interceptChars(str1,local2+1,strlen(str1));
    local3=getCharsPosition(str2,”\”");
    str3=interceptChars(str2,0,local3-1);
    saveDat(str3);
    free(str1);
    free(str2);
    free(str3);
  }
}


int isCharsContain(char *s1,char *s2){
  char *s;
  int i,counter,is;
  counter=0;
  s=strchr(s1,s2[0]);
  if(s){
    for(i=0;i<strlen(s);i++){
      if(i<strlen(s2)){
        if(s2[i]==s[i]){
          counter++;
        }
      }
    }
    if(counter==strlen(s2)){
      is=TRUE;
    }else{
      is=FALSE;
    }
  }
  return is;
}


int getCharsPosition(char *s1,char *s2){
  int i;
  char *str;
  if(isCharsContain(s1,s2)==TRUE){
    for(i=0;i<strlen(s1);i++){
      if(s1[i]==s2[0]){
        str=interceptChars(s1,i,i+strlen(s2));
        if(isCharsEquals(str,s2)==TRUE){
          free(str);
          position=i;
          return position;
        }
      }
    }
  }else{
    position=-1;
  }
  return position;
}


int isCharsEquals(char *s1,char *s2){
  int i,counter,length1,length2;
  counter=0;
  length1=strlen(s1);
  length2=strlen(s2);
  if(length1==length2){
    for(i=0;i<length1;i++){
      if(s1[i]==s2[i]){
        counter++;
      }
    }
    if(counter==length1){
      state=TRUE;
    }
  }else{
    state=FALSE;
  }
  return state;
}


char *interceptChars(char *str,int start,int end){
  int i,length;
  char *pstr;
  pstr=(char*)malloc(sizeof(char)+1);
  for(i=start;i<end;i++){
    if(i==start){
      strcpy(pstr,char2chars(str[i]));
    }else{
      length=strlen(pstr)+strlen(char2chars(str[i]));
      pstr=(char*)realloc(pstr,length+1);
      strcat(pstr,char2chars(str[i]));
    }
  }
  intercept=pstr;
  return intercept;
}


void delDat(){
  char *file;
 FILE *fp;
  file=”temp.dat”;
 if((fp=fopen(file,”r”))!=NULL){
    remove(file);
  }
  fclose(fp);
}


void saveDat(char *str){
 FILE *fp;
 if((fp=fopen(“temp.dat”,”r”))!=NULL){
  fp=fopen(“temp.dat”,”a”);
  fprintf(fp,”%s%s”,str,”\n”);
 }else{
  fp=fopen(“temp.dat”,”w”);
  fprintf(fp,”%s%s”,str,”\n”);
  }
 fclose(fp);
}


void createUrl(char *fullpath,char *content){
  FILE *fp;
  fp=fopen(fullpath,”w”);
  fprintf(fp,”%s%s”,”[InternetShortcut]“,”\n”);
  fprintf(fp,”%s%s%s”,”URL=”,content,”\n”);
  fclose(fp);
}


char *getLoginUser(){
  LPTSTR lpszSystemInfo;
  DWORD cchBuff=BUFSIZE;
  TCHAR tchBuffer[BUFSIZE];
  lpszSystemInfo=tchBuffer;
 if(GetUserName(lpszSystemInfo,&cchBuff)){
  user=(char*)lpszSystemInfo;
 }
  return user;
}


char *spellUrl(){
  char *url1,*url2,*pstr,*user;
  int length;
  url1=”C:\\Documents and Settings\\”;
  url2=”\\Favorites\\“;
  user=getLoginUser();
  length=strlen(url1)+strlen(url2)+strlen(user)+1;
  pstr=(char*)malloc((sizeof(char)+1)+length);
  strcpy(pstr,url1);
  strcat(pstr,user);
  strcat(pstr,url2);
  url=pstr;
  return url;
}


void readDat(){
  FILE *fp;
  char *path;
  char tmp[BUFSIZE];
 if((fp=fopen(“temp.dat”,”r”))!=NULL){
  fp=fopen(“temp.dat”,”r”);
    while(fgets(tmp,BUFSIZE,fp)!=NULL){
      path=spellUrl();
      strcat(path,getUrlName(tmp));
      strcat(path,”.url”);
      createUrl(path,tmp);
    }
 }else{
   printf(“temp.dat文件没有找到\n”);
  }
  fclose(fp);
}


char *getUrlName(char *str){
  int local1,local2;
  char *str1,*str2;
  local1=getCharsPosition(str,”.”);
  str1=interceptChars(str,local1+1,strlen(str));
  local2=getCharsPosition(str1,”.”);
  str2=interceptChars(str1,0,local2);
  urlName=str2;
  return urlName;
}


char *char2chars(char ch){
  chs[0]=ch;
  chs[1]=’\0′;
  return chs;
}


 


个人签名:miliya


我的站点:www.zkjia.net


原创:一段将google书签导入到ie收藏夹的小程序》有 1 条评论

  1. ymcke 说:

    API 函数还没开始看

    暂时看不懂,下个月应该看的懂.

    看懂了再来BUG

留下一个回复