基于windows API 的 用CString 保存Unicode 文本的代码示例

来源:互联网 发布:拓扑排序算法流程图 编辑:程序博客网 时间:2024/06/05 04:06

要完成课程作业 遗传算法示例,需要把一些信息保存到文本当中。 左右折腾几个小时,最后完美解决一些问题。

比如:   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 FFif (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 关闭文件。