C++读写unicode文件

#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文件,如果文件不存在,创建写入,如果存在,追加写入。


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值