使用C语言将IE收藏夹生成HTML
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;
}
                    
                

                
            
        
浙公网安备 33010602011771号