#include <iostream>
#include <string>
using namespace std;
int main(int argc, _TCHAR* argv[])
{
FILE* pfile = fopen("D:\\早上好unicode.txt", "rb");
if (!pfile) return false;
fseek(pfile, 2, 0);
wchar_t buf[1024];
wstring line;
wstring newl = L"\x000D\x000A";
while (!feof(pfile)) {
fgetws(buf, 1024, pfile);
line = buf;
if(line.find(newl)!=wstring::npos) line = line.substr(0, line.find(newl));
}
fclose(pfile);
}
搞了个国际化就是麻烦,写了个程序还要考虑各个语言的支持。要是用char存放读出来的数据全是问号。
早上好unicode.txt文件内容如下:
おはよう ;おはようございます ;おはよございます
貌似用FILE被鄙视不轻,还不会用文件句柄?好吧,写文件来套高级的花样:
DWORD WINAPI GetFileSizeFromNameW(IN LPCWSTR lpwzFile)
{
WIN32_FILE_ATTRIBUTE_DATA wfad;
xASSERT((lpwzFile));
if ( GetFileAttributesExW(lpwzFile, GetFileExInfoStandard, &wfad) )
{
return wfad.nFileSizeLow;
}
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
WCHAR szContent[MAX_PATH];
lstrcpyW(szContent,L"[2011-11-02],目标接收到指令");
LPCWSTR lpwzFile = L"Z:\\log";
HANDLE hOpenFile = (HANDLE)CreateFile(lpwzFile,GENERIC_WRITE,0,NULL,OPEN_ALWAYS,NULL,NULL);//OPEN_EXISTING
if (INVALID_HANDLE_VALUE == hOpenFile) {
hOpenFile = NULL;
return -1;
}
DWORD num;
WORD nextlineFlag = 0x0A0D;
SetFilePointer(hOpenFile,0,0,FILE_END);
if(GetFileSizeFromNameW(lpwzFile) == 0){
WORD unicodeFlag= 0xFEFF;
WriteFile(hOpenFile,&unicodeFlag,sizeof(WORD),&num,NULL);
}
WriteFile(hOpenFile,szContent,2*AdkWcsLen(szContent),&num,NULL);
WriteFile(hOpenFile,L"\r\n",2*sizeof(WCHAR),&num,NULL);
ZeroMemory(hOpenFile,0,0,FILE_END);
CloseHandle(hOpenFile);
return 1;
}
以上程序把内存的数据写入一个unicode文件,如果文件不存在,创建写入,如果存在,追加写入。