简单的一个版本:
#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
*/