📄 textfile.cpp
字号:
// TEXTFILE.cpp: implementation of the CTEXTFILE class.
//
//////////////////////////////////////////////////////////////////////
#include "TEXTFILE.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CTEXTFILE::CTEXTFILE(CAppMainHandler *pAppMain)
{
m_pAppMain = pAppMain;
m_pIFile = NULL;
}
CTEXTFILE::~CTEXTFILE()
{
}
int CTEXTFILE::Open(char* szFileName, int nReadSize)
{
FileInfo fi;
m_szFileName = szFileName;
m_nReadSize = nReadSize;
if(ISHELL_CreateInstance(m_pAppMain->m_pIShell, AEECLSID_FILEMGR,(void **)&m_pIFileMgr))
return -1; //File 包府磊 积己坷幅
if( IFILEMGR_Test(m_pIFileMgr, szFileName) == EFAILED )
goto PROC_END;
m_pIFile = IFILEMGR_OpenFile(m_pIFileMgr, szFileName, _OFM_READWRITE );
if( m_pIFile ) {
IFILE_GetInfo(m_pIFile, &fi);
m_Fi.nFileSize = fi.dwSize;
m_Fi.nFileSpare = m_Fi.nFileSize % m_nReadSize;
m_Fi.nReadCount = m_Fi.nFileSize / m_nReadSize;
m_Fi.nReadPos = m_Fi.nVWCount = 0;
}
return 0;
PROC_END:
if (m_pIFile)
IFILE_Release(m_pIFile);
else {
IFILEMGR_Release(m_pIFileMgr);
return -1;
}
IFILEMGR_Release(m_pIFileMgr);
return 0;
}
void CTEXTFILE::Close()
{
if( m_pIFile )
IFILE_Release(m_pIFile);
if( m_pIFileMgr )
IFILEMGR_Release(m_pIFileMgr);
}
char* CTEXTFILE::First()
{
m_Fi.nReadPos=0;
if( m_pIFile == NULL )
return "";
IFILE_Seek(m_pIFile, _SEEK_START, 0);//颇老 贸澜
int nReadSize = m_nReadSize;
if( m_nReadSize > m_Fi.nFileSize )
nReadSize = m_Fi.nFileSpare;
char *pFileBuf;
pFileBuf = new char[nReadSize];
IFILE_Read(m_pIFile, pFileBuf, nReadSize);
CheckEnd(pFileBuf, nReadSize);
return pFileBuf;
}
char* CTEXTFILE::Read(bool bEnd)
{
if( m_pIFile == NULL )
return "";
int nReadSize = m_nReadSize;
char chOne;
IFILE_Seek(m_pIFile, _SEEK_START, m_nReadSize*m_Fi.nReadPos - 1);
IFILE_Read(m_pIFile, &chOne, 1);
if( bEnd )
nReadSize = m_Fi.nFileSpare;
char *pFileBuf;
pFileBuf = new char[nReadSize+1];
if( chOne & 0X80 ) {
IFILE_Read(m_pIFile, pFileBuf+1, nReadSize);
pFileBuf[0] = chOne;
CheckEnd(pFileBuf, nReadSize+1);
}
else {
IFILE_Read(m_pIFile, pFileBuf, nReadSize);
pFileBuf[nReadSize] = '\0';
CheckEnd(pFileBuf, nReadSize);
}
return pFileBuf;
}
char* CTEXTFILE::Last()
{
m_Fi.nReadPos = m_Fi.nReadCount;
return Read(true);
}
char* CTEXTFILE::Prev()
{
m_Fi.nReadPos--;
if( m_Fi.nReadPos < 0 )
return First();
else
return Read();
}
char* CTEXTFILE::Next()
{
m_Fi.nReadPos++;
if( m_Fi.nReadCount > m_Fi.nReadPos )
return Read();
else
return Last();
}
bool CTEXTFILE::CheckEnd(char *szBuf, int nSize)
{
if( (*szBuf + nSize-1) & 0X80 )//场 巩磊啊 2Bytes 巩磊老锭
{
szBuf[nSize-1] = '\0';
return false;
}
return true;
}
int CTEXTFILE::SaveToFile(char *szFileName, char* szNote, bool bClose)
{
int nCount = 1024;
if( !bClose )
nCount = 1;
if( Open(szFileName, nCount) > -1 ) {
nCount = STRLEN(szNote);
IFILE_Seek(m_pIFile, _SEEK_END, 0);
IFILE_Write(m_pIFile, szNote, nCount);
m_Fi.nFileSize += nCount;
if( bClose )
Close();
return nCount;
}
return 0;
}
char CTEXTFILE::GetText(bool bNext)
{
char chBuf;
if( m_pIFile ) {
(bNext) ? m_Fi.nVWCount++ : m_Fi.nVWCount--;
if( m_Fi.nVWCount == 0 || m_Fi.nVWCount >= m_Fi.nFileSize )
return '\0';
IFILE_Seek(m_pIFile, _SEEK_START, m_Fi.nVWCount-1);
IFILE_Read(m_pIFile, &chBuf, 1);
return chBuf;
}
return '\0';
}
void CTEXTFILE::MoveIndex(int nIdx)
{
m_Fi.nVWCount = m_Fi.nVWCount + nIdx;
}
int CTEXTFILE::Write(char *pText, int nSize)
{
if( m_pIFile ) {
IFILE_Seek(m_pIFile, _SEEK_END, 0);
return IFILE_Write( m_pIFile, pText, nSize );
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -