要完成课程作业 遗传算法示例,需要把一些信息保存到文本当中。 左右折腾几个小时,最后完美解决一些问题。
比如: 1. 用UlteraEdit 打开时,总提示是否讲文本转换到dos 格式。
2. cstring 保存会被截掉一般。
FILE * myfile; myfile = CreateFile(_T("D:\\SGAdata.txt"),GENERIC_WRITE, FILE_SHARE_READ,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); if(myfile == INVALID_HANDLE_VALUE) TRACE("open File error !"); DWORD bytesWriten = 0; WCHAR UnicodeHeadFlag = 0xfeff; // 这个是表示本文是Unicode 文本,必须要写。 //由于大段\小段存储的原因,本来的标准Unicode 头 FF FE 要写成 FE FF if (WriteFile(myfile,&UnicodeHeadFlag,sizeof(WCHAR),&bytesWriten,NULL)) { TRACE("write file success. %d byte is written .\n",bytesWriten); } FlushFileBuffers(myfile); CString str(_T("******************************************\r\n")); // 这是要保存的 CString // 在后面的 \r\n 能完美解决 提到的问题一 。 if (WriteFile(myfile,str,str.GetLength()*2,&bytesWriten,NULL)) { // 这里的 str.GetLength()*2 也需要注意,这个能解决问题二。 TRACE("write file success. %d byte is written .\n",bytesWriten); } FlushFileBuffers(myfile); str = _T(" This File Is The Output Data for SGA \r\n"); if (WriteFile(myfile,str,str.GetLength()*2,&bytesWriten,NULL)) { TRACE("write file success. %d byte is written .\n",bytesWriten); } FlushFileBuffers(myfile); str = (_T("******************************************\r\n")); if (WriteFile(myfile,str,str.GetLength()*2,&bytesWriten,NULL)) { TRACE("write file success. %d byte is written .\n",bytesWriten); } FlushFileBuffers(myfile);
对了,最后还要用closehandle 关闭文件。