如题
解决方案 »
- VC做的OCX控件,调试不进入断点
- ZXDT.exe 中的0x771878f1 处最可能的异常: 0xC0000005: 写入位置0x0046957c 时发生访问冲突
- 可以解释一下MFC WINCE EVC 类,对象,窗口,消息 等等,之间的相互关系和联系,越多越好.谢谢大家
- 关于关键代码段初级问题
- (转帖)男生想要第一次的心里-------(女孩子必看)
- 大家现在都用VC6还是VC7?
- CSocket连接上服务器之后,要send()时,是不是要判断CSocket因不明原因已断开?
- 为什么我的程序不能static编译?高分求教
- 在连接时出现一个奇怪的错误
- MFC 动态加载文档模板 使用我产生的模板
- 控件的问题
- 多线程串口操作
回头整理一个函数,可判断文本文件编码格式 自动转换为unicode
如果编码仅仅存在UTF-8或者GB2312或者UNICODE这三种可能的话,是可以判断的。
UTF-8编码的文件头前3个字节为0xEF 0xBB 0xBF。
UNICODE文件头前两个字节为0xFF 0xFE或者UNICODE_BIG_ENDIAN的时候为0xFE 0xFF。
ANSI或者GB2312无文件头。
// CString strUtf8FileFullPath——[in]指定的Utf8编码文件全路径
// 备注:要求指定的文件是Utf8编码的。否则,获取的字符串乱码!
CString GetContentFromUtf8File(CString strUtf8FileFullPath)
{
// 打开文件
CFile myFile;
if( !myFile.Open(strUtf8FileFullPath, CFile::modeRead) )
{
OutputDebugString(_T("GetContentFromUtf8File——文件打开失败!文件路径:") + strUtf8FileFullPath);
return _T("");
}
// 读取文件内容
LONGLONG llSize = myFile.GetLength();
BYTE* pBuf = new BYTE[llSize + 1];
ZeroMemory(pBuf, llSize + 1);
myFile.Read(pBuf, llSize);
myFile.Close(); // 由于文件是Utf8编码的,需要转换为Unicode编码!
USES_MYCP_CONVERSION;
USES_CP_UTF8;
CString strFileContent = CP2W((const char*)(LPCTSTR)pBuf, CP_UTF8);
delete[] pBuf; CString strOutput = _T("");
strOutput.Format(_T("GetContentFromUtf8File——文件名:%s\r\n\r\n文件内容:\r\n%s"), strUtf8FileFullPath, strFileContent);
OutputDebugString(strOutput); return strFileContent;
}
// CString strXmlFileFullPath——[in]指定的Xml文件全路径
// CString& strFileContent——[out]记录文件内容
BOOL GetContentFromXmlFile(CString strXmlFileFullPath, CString& strFileContent)
{
strFileContent = _T(""); CoInitialize(NULL); BOOL bResult = FALSE; MSXML::IXMLDOMDocumentPtr pXMLDocument = NULL;
HRESULT hr = pXMLDocument.CreateInstance(_uuidof(MSXML::DOMDocument));
if( FAILED(hr) || pXMLDocument == NULL )
// 创建文档实例失败
{
OutputDebugString(_T("GetContentFromXmlFile——创建XML文档实例失败!"));
}
else if( FAILED(pXMLDocument->put_async(VARIANT_FALSE)) )
// 禁止异步操作失败
{
OutputDebugString(_T("GetContentFromXmlFile——禁止异步操作失败!"));
}
else if( pXMLDocument->load( (CComVariant)strXmlFileFullPath ) != VARIANT_TRUE )
// 加载Xml文件失败
{
OutputDebugString(_T("GetContentFromXmlFile——加载XML文件'") + strXmlFileFullPath + _T("'失败!"));
}
else
{
// 获取文件内容
strFileContent = (LPCTSTR)pXMLDocument->Getxml(); // 至此,操作成功!
bResult = TRUE;
} CString strOutput = _T("");
strOutput.Format(_T("GetContentFromXmlFile——文件名:%s\r\n\r\n文件内容:\r\n%s"), strXmlFileFullPath, strFileContent);
OutputDebugString(strOutput); // 资源回收
if( pXMLDocument != NULL )
{
pXMLDocument.Release();
}
CoUninitialize(); return bResult;
}
// CString strXmlFileFullPath——[in]指定的Xml文件全路径
// CString& strFileContent——[out]记录文件内容
BOOL GetContentFromXmlFile(CString strXmlFileFullPath, CString& strFileContent)
{
strFileContent = _T(""); CoInitialize(NULL); BOOL bResult = FALSE; MSXML::IXMLDOMDocumentPtr pXMLDocument = NULL;
HRESULT hr = pXMLDocument.CreateInstance(_uuidof(MSXML::DOMDocument));
if( FAILED(hr) || pXMLDocument == NULL )
// 创建文档实例失败
{
OutputDebugString(_T("GetContentFromXmlFile——创建XML文档实例失败!"));
}
else if( FAILED(pXMLDocument->put_async(VARIANT_FALSE)) )
// 禁止异步操作失败
{
OutputDebugString(_T("GetContentFromXmlFile——禁止异步操作失败!"));
}
else if( pXMLDocument->load( (CComVariant)strXmlFileFullPath ) != VARIANT_TRUE )
// 加载Xml文件失败
{
OutputDebugString(_T("GetContentFromXmlFile——加载XML文件'") + strXmlFileFullPath + _T("'失败!"));
}
else
{
// 获取文件内容
strFileContent = (LPCTSTR)pXMLDocument->Getxml(); // 至此,操作成功!
bResult = TRUE;
} CString strOutput = _T("");
strOutput.Format(_T("GetContentFromXmlFile——文件名:%s\r\n\r\n文件内容:\r\n%s"), strXmlFileFullPath, strFileContent);
OutputDebugString(strOutput); // 资源回收
if( pXMLDocument != NULL )
{
pXMLDocument.Release();
}
CoUninitialize(); return bResult;
}