当前位置: 代码迷 >> C语言 >> 『求助』调试一个将GOOGLE书签导入IE收藏夹的小程序
  详细解决方案

『求助』调试一个将GOOGLE书签导入IE收藏夹的小程序

热度:322   发布时间:2008-02-22 09:04:30.0
『求助』调试一个将GOOGLE书签导入IE收藏夹的小程序
这是我从网上下载的一个小程序,但是总是编译失败,请高手帮忙给修改修改。谢谢

#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 字符串
返回值:void
*/
void setUrlName(char *str);

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


int main(void){
  char srcpath[BUFSIZE];
  printf("收藏夹转换小程序,目的是将GoogleBookmarks导入到Internet Explorer收藏夹,本程序功能相对简单,如发生意外问题,请谅解。");
  printf("\n请输入GoogleBookmarks存放的路径:");
  scanf("%s",srcpath);
  printf("\n准备将GoogleBookmarks中收藏导入到Internet Explorer收藏中......");
  delDat();
  readgmk(srcpath);
  readDat();
  printf("\n成功导入到Internet Explorer收藏夹");
return 0;
}

void readgmk(char *filename){
  char tmp[BUFSIZE];
  FILE *fp;
  if((fp=fopen(filename,"r"))==NULL){
    printf("读取gmark文件失败");
  }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);
    setUrlName(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==s){
          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==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==s2){
        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));
    }else{
      length=strlen(pstr)+strlen(char2chars(str));
      pstr=(char*)realloc(pstr,length+1);
      strcat(pstr,char2chars(str));
    }
  }
  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());
      strcat(path,".url");
      createUrl(path,tmp);
    }
}else{
  printf("temp.dat文件没有找到\n");
  }
  fclose(fp);
}

void setUrlName(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;
}

char *getUrlName(){
  if(urlName!=NULL){
    return urlName;
  }else{
    urlName=NULL;
  }
  return urlName;
}

char *char2chars(char ch){
  chs[0]=ch;
  chs[1]='\0';
  return chs;
}
搜索更多相关的解决方案: 收藏夹  GOOGLE  书签  调试  

----------------解决方案--------------------------------------------------------
  相关解决方案