#define TMP_FILE _T("my_test.txt")
#define DEST_FILE _T("my_dest.txt")
#define SECTION_BEGIN_FLAG _T("/* <")
#define SECTION_END_FLAG _T("> */")
#define DELETE_FLAG _T("Things can only get better")
void CCFileDlg::OnButtonDelete()
{
// TODO: Add your control notification handler code here
CStdioFile fDes, fTmp;
if (!fDes.Open(DEST_FILE, CFile::modeRead))
{
MessageBox(_T("Open file failed!"), _T("Prompt"));
return;
}
if (!fTmp.Open(TMP_FILE, CFile::modeCreate | CFile::modeWrite))
{
MessageBox(_T("Create file failed!"), _T("Prompt"));
return;
}
CString strReadBuf;
int iStrPos = 0;
ULONGLONG uFilePos = 0;
ULONGLONG uTmpFilePos = 0;
while (fDes.ReadString(strReadBuf))
{
CString strTmpBuf(strReadBuf);
strTmpBuf.SpanExcluding(_T(" "));
if ((iStrPos = strTmpBuf.Find(SECTION_BEGIN_FLAG)) >= 0)
{
uFilePos = fDes.GetPosition();
uFilePos -= strReadBuf.GetLength();
uTmpFilePos = fTmp.GetPosition();
}
if ((iStrPos = strReadBuf.Find(DELETE_FLAG)) >= 0)
{
fDes.Seek(uFilePos, CFile::begin);
fTmp.Seek(uTmpFilePos, CFile::begin);
do {
if (!fDes.ReadString(strReadBuf))
break;
strTmpBuf = strReadBuf;
strTmpBuf.SpanExcluding(_T(" "));
} while ((iStrPos = strTmpBuf.Find(SECTION_END_FLAG)) < 0);
break;
}
fTmp.WriteString(strReadBuf + _T('\n'));
}
// 进行剩余部分的复制
while (fDes.ReadString(strReadBuf))
{
fTmp.WriteString(strReadBuf + _T('\n'));
}
fTmp.SetLength(fTmp.GetPosition());
fTmp.Close();
fDes.Close();
// 移除目的文件
// CFile::Remove(DEST_FILE);
// 将临时文件命名为目的文件
// CFile::Rename(TMP_FILE, DEST_FILE );
}
void CTest6Dlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult){//这样貌似也行,简单点 NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; if(pNMListView->iItem != -1) { m_ListCtrl.SetItemState(pNMListView->iItem, 0,-1); } *pResult = 0;}CListCtrl的某一项变灰,不可选中
本文介绍了一个C++程序中实现的文件内容过滤方法,包括如何读取源文件、写入目标文件,并跳过特定标记的部分。同时,还展示了如何在Windows应用程序中通过消息处理更改列表项的状态。
2660

被折叠的 条评论
为什么被折叠?



