很多童鞋问我如何把文件包含进MFC里 在DoModal后自动释放文件 我去谷歌了半天 从某位大神里找到了转化文件为数组的代码 略作修改 写成了一个函数 以下为实现这个功能的具体步骤
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1.转化文件 贴代码
1 BOOL ToArray(CString file) 2 { 3 FILE *v_fpLog, *fp; 4 int fSet = 0, fEnd = 0, i, j; 5 int filelen = 0, num, last, r; 6 char *pb, ch[6], cnum[11]; 7 if ( (v_fpLog = fopen( file , "rb+")) == NULL || (fp = fopen( "结果.h" , "w+a+")) == NULL) 8 { 9 return FALSE; 10 } 11 else 12 { 13 fseek( v_fpLog, 0, SEEK_SET ); 14 fSet = ftell( v_fpLog ); 15 fseek( v_fpLog, 0, SEEK_END ); 16 fEnd = ftell( v_fpLog ); 17 pb = (char *)malloc(fEnd - fSet ); 18 fseek( v_fpLog, 0, SEEK_SET ); 19 fread(pb, fEnd - fSet, 1, v_fpLog); 20 fwrite("unsigned char Array[", 23, 1, fp); 21 memset(cnum, 0, 11); 22 itoa(fEnd-fSet, cnum, 10); 23 fwrite(cnum, sizeof(cnum), 1, fp); 24 fwrite("] = { ", 6, 1, fp); 25 fwrite("\n", 2, 1, fp);////// 26 num = (fEnd-fSet)/16; 27 last = (fEnd-fSet)%16; 28 for(i = 0; i < num; i++) 29 { 30 for(j = 0; j < 16; j++) 31 { 32 memset(ch, 0, 6); 33 r = (int)pb[j + 16 * i]; 34 r = r & (0xFF); 35 sprintf(ch, "0x%02x,", r); 36 r = fwrite(ch, sizeof(ch), 1, fp); 37 } 38 fwrite("\n", 2, 1, fp); 39 } 40 for(i = 0; i < last; i++) 41 { 42 r = (int)pb[i + 16 * num]; 43 r = r & (0xFF); 44 sprintf(ch, "0x%02x,", r); 45 fwrite(ch, sizeof(ch), 1, fp); 46 } 47 fwrite("}", 1, 1, fp); 48 fwrite(";", 2, 1, fp); 49 free(pb); 50 fclose(v_fpLog); 51 fclose(fp); 52 } 53 return TRUE; 54 }
把文件路径传入 file 变量 生成"结果.h" 文件
2.将文件加入工程 并INCLUDE该文件
3.贴释放代码
1 CFile file; 2 file.Open("导出文件名",CFile::modeCreate|CFile::modeWrite); 3 file.Write(array,sizeof(array)); 4 file.Close(); 5 AfxMessageBox("导出完成");
4.调用文件
*************************************************************************************
最后 注意事项 如果所需转化文件大于1MB 建议分几个.h进行转换 如果实在不想麻烦 就把Project->Settings->C/C++->Project Options里加上 /Zm 1000
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
浙公网安备 33010602011771号