16,551
社区成员
发帖
与我相关
我的任务
分享
std::string ws2s(const std::wstring& ws)
{
std::string curLocale = setlocale(LC_ALL, NULL); // curLocale = "C";
setlocale(LC_ALL, "chs");
const wchar_t* _Source = ws.c_str();
size_t _Dsize = 2 * ws.size() + 1;
char *_Dest = new char[_Dsize];
memset(_Dest,0,_Dsize);
wcstombs(_Dest,_Source,_Dsize);
std::string result = _Dest;
delete []_Dest;
setlocale(LC_ALL, curLocale.c_str());
return result;
}
std::string readTxt(char* filename) {
ifstream fin;
fin.open(filename, ios::binary);
size_t index = 2;
std::string strRet;
std::string strLineAnsi;
std::wstring wstrLine;
while (!fin.eof())
{
fin.seekg(index, ios::beg);
wchar_t wch;
fin.read((char *)(&wch), 2);
if (wch == 0x000D) // 判断回车
{
strLineAnsi = ws2s(wstrLine);
wstrLine.erase(0, wstrLine.size() + 1);
index += 4; // 跳过回车符和行开头符
strRet = strRet + strLineAnsi;
}
else
{
wstrLine.append(1, wch);
index += 2;
}
}
strLineAnsi = ws2s(wstrLine);
strRet = strRet + strLineAnsi;
fin.close();
printf("%s", strRet.c_str());
return strRet;
}
if (strLineAnsi!="")
{
strRet=strRet.substr(0,strRet.length()-1);
}
try
{
CFile file;
file.Open(_T("F:\\11.txt"), CFile::modeRead);
DWORD len = file.GetLength();
wchar_t* pBuf = new wchar_t[len+1];
memset(pBuf, 0, (len+1)*sizeof(wchar_t));
file.Seek(2, CFile::begin);
file.Read(pBuf, len);
file.Close();
char* pText = NULL;
int size = WideCharToMultiByte(CP_ACP, 0, pBuf, -1, pText, 0, NULL, NULL);
pText = new char[size];
memset(pText, 0, size);
WideCharToMultiByte(CP_ACP, 0, pBuf, -1, pText, size, NULL, NULL);
AfxMessageBox(CString(pText));
file.Open(_T("F:\\12.txt"), CFile::modeCreate|CFile::modeWrite);
file.Write(pText, size);
file.Close();
delete[] pText;
delete[] pBuf;
}
catch (CFileException* e)
{
e->ReportError();
e->Delete();
}