使用unix或者是linux 的人经常使用的命令就是man 来查找一些命令或者是函数的使用方法。前几天,我down了一个cgywin ,想学学在linux环境下面的开发,在cgywin 使用man 来查看帮助总是感觉没有在window下面使用一些文本编辑器例如Ultraedit 看得爽,感觉不怎么直接(相信这种感觉只是对于那些刚刚接触*nix 的人才有),于是,我边把帮助文件重定向输出到一个文件中,在window 下面使用UltraEdit 来看帮助文件,可是,我发现,重定向输出的文件中包含了man 的一些控制字符(下划线、颜色),在window下面根本就很难直接阅读。于是,我便写了一个小程序,把重定向输出的帮助文件内容,转化成为window 下面的文本文件。
程序比较简单,主要是找出控制字符,并且对其进行转换。程序代码如下:
int main(int argc, char* argv[]) { char *pName = argv[0]; pName += strlen(argv[0]); while(pName > argv[0] && pName[-1] != '\\'){ pName --; } if(argc != 2) { printf("Usage : %s fileName \r\n eg.: %s vingo.txt\r\n",pName,pName); return 0; } HANDLE hFile = CreateFile(argv[1], GENERIC_READ, FILE_SHARE_READ , 0, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, NULL); if(hFile == INVALID_HANDLE_VALUE) { printf("Can not open file : %s\r\n",argv[1]); DWORD dwError = GetLastError(); return 0; } char szNewFileName[MAX_PATH]; sprintf(szNewFileName,"%s.vingo.txt",argv[1]); HANDLE hFileNew = CreateFile(szNewFileName, GENERIC_WRITE, FILE_SHARE_READ, NULL,CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if(hFileNew == INVALID_HANDLE_VALUE) { CloseHandle(hFile); printf("Can not Create File \r\n"); return 0; } char chTemp ; DWORD cbRead ; DWORD cbWrite; while(ReadFile(hFile,&chTemp,sizeof(char), &cbRead, NULL)) { if(cbRead == 0) { break; } //printf("[%.2x]",chTemp); if(chTemp == 0x08){ ReadFile(hFile,&chTemp,sizeof(char), &cbRead, NULL); continue; } if(chTemp == 0x5F){ ReadFile(hFile,&chTemp,sizeof(char), &cbRead, NULL); if(chTemp == 0x08){ continue ; } else{ if(chTemp == 0x5F){ SetFilePointer(hFile,-1,0,FILE_CURRENT); } } } if(chTemp == 0x0a){ WriteFile(hFileNew,"\r\n" ,2,&cbWrite, NULL); } if( (chTemp <= 0x7E) && (chTemp >= 0x20) ){ WriteFile(hFileNew,&chTemp,sizeof(char),&cbWrite, NULL); if(cbWrite != sizeof(char) ) { printf("While Writing %c , maybe happen some errors",chTemp); } } }
CloseHandle(hFile); CloseHandle(hFileNew); printf("OK... Translate Successfully \r\nPlease Read File : %s \r\n",szNewFileName); return 0; }

|