IE收藏夹里收藏的链接很多,查找也不方便,使用C编写一个小工具,可以将收藏夹里的链接文件生成到一个HTML文件上。
源码还有许多地方需要优化,后续我会优化,先分享出来。目的主要是为了练习C语言,这个代码中使用了最原始的C语言代码,比如结构体,指针,字符串操作,链表,目录遍历,读写文件等。
代码中一些地方原本是基于windows的C++写成,后来改成使用标准C函数。如果您和我一样,好多年不用C了,不防看看,重温当前学C的感觉。
请看官拍砖。
#include <stdio.h>
#include <string.h>
#include <stdlib.h> #include <iostream>
#include <io.h>
#include <direct.h>
#include <string>
#include <vector>
#include <iomanip>
#include <ctime> using namespace std; #define BUFLEN 1024 typedef struct UrlFile
{
char filename[200];
char url[300];
char path[300];
char urltype[100];
struct UrlFile *next;
}UrlFileModel; void getFiles( string path );
char* getUrl(char* filename); UrlFileModel Start;
UrlFileModel *FileList; int main()
{
FILE *file;
int index=0;
UrlFileModel *tmpnode; Start.next=NULL;
FileList=&Start; getFiles( "C:\\Users\\ldy\\Favorites\\" ); tmpnode=&Start; while(tmpnode)
{
char* url=getUrl(tmpnode->path); if (url)
{
//printf("%s",url); //此处导致url字符串的截取
strcpy(tmpnode->url,url);
} tmpnode=tmpnode-> next;
} if ((file=fopen("test.html","w"))==NULL) /*打开只写的文本文件*/
{
printf("cannot open file!");
exit(0);
} tmpnode=&Start; fputs("<html><head><title></title></head><body><table>",file); while(tmpnode)
{
index++;
printf( "%s\n ",tmpnode-> filename);
//printf( "%s\n ",tmpnode->urltype); fprintf(file,"<tr><td>%d</td><td><a href='%s' target='_blank'>%s</a></td><td>%s</td></tr>",index,tmpnode->url,tmpnode-> filename,tmpnode-> urltype); tmpnode=tmpnode-> next;
} fputs("</table></body></html>",file);
fclose(file); /*关文件*/ printf( "总计收藏的页面:%d\n ",index);
fgetchar();
} void getFiles( string path )
{
//文件句柄
long hFile = 0;
//文件信息
struct _finddata_t fileinfo; string p;
char urltype[]="fav"; if ((hFile = _findfirst(p.assign(path).append("\\*").c_str(),&fileinfo)) != -1)
{
do
{
//如果是目录,迭代之
//如果不是,加入列表
if ((fileinfo.attrib & _A_SUBDIR))
{ if(strcmp(fileinfo.name,".") != 0 && strcmp(fileinfo.name,"..") != 0)
getFiles( p.assign(path).append("\\").append(fileinfo.name) );
}
else
{ FileList->next=(struct UrlFile*)malloc(sizeof(struct UrlFile));
FileList=FileList->next;
strcpy(FileList->filename,fileinfo.name);
strcpy(FileList->urltype,path.c_str());
strcpy(FileList->path,p.assign(path).append("\\").append(fileinfo.name).c_str()); FileList->next=NULL; }
} while(_findnext(hFile, &fileinfo) == 0); _findclose(hFile); } } char* getUrl(char* filename)
{
FILE *file;
char buf[BUFLEN];
int len=0,i=0; char *delim = "BASEURL="; char* tmpptr; file=fopen(filename,"r");
if (!file)
{
printf("file open error!");
return NULL;
} while (fgets(buf,BUFLEN,file))
{
tmpptr=strstr(buf,"BASEURL=");
if (!tmpptr)
{
continue;
}
int len=strlen(tmpptr);
if (len>0)
{
tmpptr=strtok(tmpptr,"BASEURL=");
printf("%s\n",tmpptr);
break;
}
} fclose(file);
return tmpptr;
}