从日志中得到http开头的网址

简单的一个版本:

#include "windows.h"
#include "string.h"
#include "stdio.h"
//void Query_http_From_File(char * filename);
int main(){

    HANDLE hFile1,hFile2;
    char * logfile = "f39937634fd1190448bf74ccef2bf59e.log";
    char * log = "log.log";

    if((    hFile1= CreateFile(logfile,
        GENERIC_READ,
        FILE_SHARE_READ,
        NULL,
        OPEN_EXISTING,
        FILE_FLAG_SEQUENTIAL_SCAN,
        NULL)) == INVALID_HANDLE_VALUE)
    {
        printf( "文件1打开失败!/n" );
        return 0;
    }

/*    
    if((    hFile2= CreateFile(log,
        GENERIC_WRITE,
        FILE_SHARE_WRITE,
        NULL,
        OPEN_ALWAYS,
        FILE_FLAG_WRITE_THROUGH,
        NULL)) == INVALID_HANDLE_VALUE)
    {
        printf( "文件2打开失败!/n" );
        return 0;
    }
*/    
    int filesize = GetFileSize(hFile1,NULL);

    char * pBuffer;
    DWORD RSize;
    DWORD WSize;
//    char aaa[500000];
//    char * aaa;
    pBuffer = (char *)malloc(filesize);
    ReadFile(hFile1,pBuffer,filesize,&RSize,NULL);
    
//    char * HttpHead = "http:\\\\";
    for(int i=0; i<filesize-10;i++){
        if(*pBuffer==104 
                && *(pBuffer+1)==116 
                && *(pBuffer+2)==116 
                && *(pBuffer+3)==112 
                && *(pBuffer+4)==58 
                && *(pBuffer+5)==47
                && *(pBuffer+6)==47
                && *(pBuffer+7)>96
                && *(pBuffer+7)<123){
//            strchr(pBuffer,' ');
//            strcpy(aaa,pBuffer);
//            strncpy(aaa,pBuffer,strchr(pBuffer,' ')-pBuffer);
//            stpcpy(aaa,pBuffer);
//            int j = strlen(aaa);
            hFile2= CreateFile(log,
                GENERIC_WRITE,
                FILE_SHARE_WRITE,
                NULL,
                OPEN_ALWAYS,
                FILE_ATTRIBUTE_NORMAL,
                NULL);
            if(hFile2 != INVALID_HANDLE_VALUE){
                SetFilePointer(hFile2,0, NULL, FILE_END);  
//                DWORD j = DWORD(strchr(pBuffer,' '))-DWORD(pBuffer);
//                (void*)strchr(pBuffer,' ') - (void*)pBuffer
//                Sleep(10);
//对比下,指针相减的问题
//               WriteFile(hFile2,pBuffer,strchr(pBuffer,' ') - pBuffer,&WSize,NULL);
                WriteFile(hFile2,pBuffer,(strchr(pBuffer,' ') - pBuffer)/sizeof(byte),&WSize,NULL);  
                SetFilePointer(hFile2,0, NULL, FILE_END);  
                const char * line = "\n";
                WriteFile(hFile2,line,1,&WSize,NULL);
                FlushFileBuffers(hFile2);
                CloseHandle(hFile2);
            }
        }
        pBuffer += 1;
    }
    CloseHandle(hFile1);
//    CloseHandle(hFile2);


    return 1;
}


/*
参考

CreateFile用法和例子
http://blog.csdn.net/cocolovelove/article/details/3481958

字符串函数
http://www.cnljh.com/clib/string/strcpy.html
*/

改进1:(调用函数,关于插入一个换行加Enter字符还没弄好)

#include "windows.h"
#include "string.h"
#include "stdio.h"
int Query_http_From_File(char * filename1,char * filename2);
int main(){


	char * logfile = "f39937634fd1190448bf74ccef2bf59e.log";
	char * log = "log.log";
	Query_http_From_File(logfile,log);



	return 1;
}
int Query_http_From_File(char * logfile,char * log){
		HANDLE hFile1,hFile2;
		if((	hFile1= CreateFile(logfile,
		GENERIC_READ,
		FILE_SHARE_READ,
		NULL,
		OPEN_EXISTING,
		FILE_FLAG_SEQUENTIAL_SCAN,
		NULL)) == INVALID_HANDLE_VALUE)
	{
		printf( "文件1打开失败!/n" );
		return 0;
	}

	int filesize = GetFileSize(hFile1,NULL);

	char * pBuffer;
	DWORD RSize;
	DWORD WSize;
	pBuffer = (char *)malloc(filesize);
	ReadFile(hFile1,pBuffer,filesize,&RSize,NULL);
	for(int i=0; i<filesize-10;i++){
		if(*pBuffer==104 
				&& *(pBuffer+1)==116 
				&& *(pBuffer+2)==116 
				&& *(pBuffer+3)==112 
				&& *(pBuffer+4)==58 
				&& *(pBuffer+5)==47
				&& *(pBuffer+6)==47
				&& *(pBuffer+7)>96
				&& *(pBuffer+7)<123){
			hFile2= CreateFile(log,
				GENERIC_WRITE,
				FILE_SHARE_WRITE,
				NULL,
				OPEN_ALWAYS,
				FILE_ATTRIBUTE_NORMAL,
				NULL);
			if(hFile2 != INVALID_HANDLE_VALUE){
				SetFilePointer(hFile2,0, NULL, FILE_END);  
				WriteFile(hFile2,pBuffer,(strchr(pBuffer,' ') - pBuffer)/sizeof(byte),&WSize,NULL);  
				SetFilePointer(hFile2,0, NULL, FILE_END);  
				const char * line = "\n";
				WriteFile(hFile2,line,1,&WSize,NULL);
				FlushFileBuffers(hFile2);
				CloseHandle(hFile2);
			}
		}
		pBuffer += 1;
	}
	CloseHandle(hFile1);
	return 1;
}

/*
参考

CreateFile用法和例子
http://blog.csdn.net/cocolovelove/article/details/3481958

字符串函数
http://www.cnljh.com/clib/string/strcpy.html
*/

改进二 (换行 \n  回车\r  00表示NULL  20表示空格 关注内存指针的减)

#include "windows.h"
#include "string.h"
#include "stdio.h"
void Query_http_From_File(char * filename1,char * filename2);
int main(){


    char * logfile = "007c98cf854e7117f368caaea3ef2506.log";
    char * log = "log.txt";
    Query_http_From_File(logfile,log);



    return 1;
}
void Query_http_From_File(char * logfile,char * log){
        HANDLE hFile1,hFile2;
        if((    hFile1= CreateFile(logfile,
        GENERIC_READ,
        FILE_SHARE_READ,
        NULL,
        OPEN_EXISTING,
        FILE_FLAG_SEQUENTIAL_SCAN,
        NULL)) == INVALID_HANDLE_VALUE)
    {
        printf( "文件1打开失败!/n" );
//        return 0;
    }

    int filesize = GetFileSize(hFile1,NULL);

    char * pBuffer;
    DWORD RSize;
    DWORD WSize;
    pBuffer = (char *)malloc(filesize);
    ReadFile(hFile1,pBuffer,filesize,&RSize,NULL);
    for(int i=0; i<filesize-10;i++){
        if(*pBuffer==104 
                && *(pBuffer+1)==116 
                && *(pBuffer+2)==116 
                && *(pBuffer+3)==112 
                && *(pBuffer+4)==58 
                && *(pBuffer+5)==47
                && *(pBuffer+6)==47
                && *(pBuffer+7)>96
                && *(pBuffer+7)<123){
            hFile2= CreateFile(log,
                GENERIC_WRITE,
                FILE_SHARE_WRITE,
                NULL,
                OPEN_ALWAYS,
                FILE_ATTRIBUTE_NORMAL,
                NULL);
            if(hFile2 != INVALID_HANDLE_VALUE){
                SetFilePointer(hFile2,0, NULL, FILE_END);  
//                WriteFile(hFile2,pBuffer,(strchr(pBuffer,' ') - pBuffer),&WSize,NULL);  
//                WriteFile(hFile2,pBuffer,(strchr(pBuffer,' ') - (char *)pBuffer)/sizeof(byte),&WSize,NULL);  
//                WriteFile(hFile2,pBuffer,(strchr(pBuffer,NULL) - (char *)pBuffer)/sizeof(byte),&WSize,NULL);  //此处注意  
                WriteFile(hFile2,pBuffer,(strchr(pBuffer,NULL) - pBuffer)/sizeof(byte),&WSize,NULL);  
                SetFilePointer(hFile2,0, NULL, FILE_END);  
                const char * line = "\r\n";
                WriteFile(hFile2,line,2,&WSize,NULL);
                FlushFileBuffers(hFile2);
                CloseHandle(hFile2);
            }
        }
        pBuffer += 1;
    }
    CloseHandle(hFile1);
//    return 1;
}

/*
参考

CreateFile用法和例子
http://blog.csdn.net/cocolovelove/article/details/3481958

字符串函数
http://www.cnljh.com/clib/string/strcpy.html
*/








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值