16,473
社区成员
发帖
与我相关
我的任务
分享
void CXXXDoc::Serialize(CArchive& ar)
{
for (POSITION pos = GetFirstViewPosition(); pos != NULL;)
{
CVisualCoderView* pView = DYNAMIC_DOWNCAST(CVisualCoderView,
GetNextView(pos));
if (pView != NULL)
{
pView->SerializeRaw(ar);
}
}
}
void CVCEditView::SerializeRaw(CArchive& ar)
{
if (ar.IsStoring())
{
///SaveFile(*ar.GetFile());
}
else
{
OpenFile(*ar.GetFile());
}
}
//****************************************************************************************
BOOL CVCEditView::OpenFile(const CString& strFileName)
{
CFile file;
if (!file.Open(strFileName, CFile::modeRead))
{
TRACE(_T("File not found: %s"), strFileName);
return FALSE;
}
return OpenFile(file);
}
//***************************************************************************************
BOOL CVCEditView::OpenFile(CFile& file)
{
try
{
// Prepare buffer:
const DWORD dwFileSize = (const DWORD)file.GetLength();
char* pszFileBuffer = new char[dwFileSize + 2];
memset(pszFileBuffer, 0, dwFileSize + 2);
// Read from a file:
#if _MSC_VER >= 1300
file.Read((void*)pszFileBuffer, dwFileSize);
#else
file.ReadHuge((void*)pszFileBuffer, dwFileSize);
#endif
#ifdef _UNICODE
if (dwFileSize == 0)
{
SetWindowText(_T(""));
delete[] pszFileBuffer;
return TRUE;
}
if (!IsTextUnicode((void*)pszFileBuffer, dwFileSize, NULL))
{
// Convert buffer to Unicode:
WCHAR* pszTextBuffer = new WCHAR[dwFileSize + 1];
memset(pszTextBuffer, 0, (dwFileSize + 1) * sizeof(WCHAR));
const int nTextLen = MultiByteToWideChar(::GetACP(), 0,
pszFileBuffer, dwFileSize, pszTextBuffer, dwFileSize);
ASSERT((DWORD)nTextLen <= dwFileSize);
if (nTextLen <= 0)
{
TRACE0("SaveFile failed - system convertion API failed\n");
delete[] pszTextBuffer;
return FALSE;
}
pszTextBuffer[nTextLen] = _T('\0');
SetWindowText(pszTextBuffer);
delete[] pszTextBuffer;
}
else
{
TCHAR* pszText = (TCHAR*)pszFileBuffer;
// Skip byte-order mark:
int nFlags = IS_TEXT_UNICODE_SIGNATURE;
IsTextUnicode((void*)pszFileBuffer, dwFileSize, &nFlags);
if (nFlags != 0) // has the Unicode byte-order mark (BOM)
{
pszText = pszText + 1;
}
SetWindowText(pszText);
}
#else
SetWindowText((TCHAR*)pszFileBuffer);
#endif
// Free memory:
delete[] pszFileBuffer;
}
catch (CFileException* pEx)
{
pEx->ReportError();
pEx->Delete();
return FALSE;
}
return TRUE;
}
//***************************************************************************************
This method reads or writes the text in the CEditView object to a text file. SerializeRaw differs from the CEditView internal implementation of Serialize in that it reads and writes only the text, without preceding object-description data.
void SerializeRaw(
CArchive& ar );
文本文件不关心后缀,其他格式的文本文件是可以打开的,我可以理解为你想默认的文件打开对话框过滤器中出现*.txt?