① MFC中写入文件
参考代码如下:
BOOL CnewoneDlg::OutputBase(void)
{
// 1 组合到总字符串strSum中
CString strSum = _T(""), strTmp;
for(int i=0; i<50; i++)
{
strTmp.Format(_T("\r\n\r\n%d."), i);
strSum += strTmp;
strSum += _T("\r\n Sex: ") + A[i].Sex;
// 2 写入文件
CFile cf;
if(!.Open(_T("D:\\TXL.TXT"), CFile::modeCreate|CFile::modeWrite))
{
AfxMessageBox(_T("D:\\TXL.TXT \r\n Open failed when write."));
return FALSE;
}
int len = strSum.GetLength()
cf.Write(strSum.GetBuffer(len), len);
cf.Close();
strSum.ReleaseBuffer();
return TRUE;
}
void CnewoneDlg::OnBnClickedButton3()
{
// TODO: 在此添加控件通知处理程序代码
OutputBase();
EndDialog(1);
}
② mfc 如何打开文件
读取EXCEL文档里的数据,因为EXCEL是有格式的,所以和读取TXT等数据文件完全不同。
如果TXT,那回么使用CFile类Open打开文件就可答以读取数据了,相对比较简单。
读取EXCEL文档里的数据,需要用ADO数据源或者OLE的Office组件,在Open菜单响应函数中设置数据源并进行数据库操作,如果初学,可能会比较困难,需要熟悉的东西很多。
建议:EXCEL文件可以另存为csv格式,这个是纯文本的,可以直接CFile按照文本文档读取,如果不是项目需求,这个实现比较适合初学者。
③ MFC一段文件操作代码在主线程和多线程中有什么区别和注意事项
首先强调一点:你这里有主线程和和新建线程,它们都存在于你这个程序的进程里专,这属个问题没涉及主进程、子进程什么的,进程和线程的概念千万别弄混。
即使新建线程没用Sleep函数,界面照样不能即时响应新建线程更新界面的操作。Windows的线程可分为UI线程和工作线程,主线程是UI线程,负责一切响应用户输入和绘制窗口界面的人机交互工作,新建的线程是工作线程,只负责运算,不处理人机交互。所以何时响应界面的更新绘制是由你的主线程决定的,如果主线程还在执行某个函数而没有回到消息循环,就不能更新界面,啥时候那个函数执行完了就可以更新界面了。
防止线程被打断,是线程同步问题,与这里的问题没啥关系。Windows提供了一系列的线程同步API,你可以使用像自旋锁、临界区、Slim读写锁、条件变量这样的用户级线程同步API,也可以使用事件、信号量、互斥量这样的内核同步对象。具体的原理和使用方法不是三言两语能说清楚的,你可以阅读操作系统教材和《Windows核心编程》中讲解多线程的章节。
④ MFC打开文件夹
void CXXXDlg::OpenFolder(){ BROWSEINFO bi; ZeroMemory(&bi,sizeof(BROWSEINFO)); //添加提示语句 bi.lpszTitle= _T("请选择文件夹"); //添加"新建文件夹项"和"编辑框" bi.ulFlags = BIF_NEWDIALOGSTYLE | BIF_EDITBOX; // 显示一个对话框让让用户选择文件夹 LPITEMIDLIST pidl = SHBrowseForFolder(&bi); char szFolder[_MAX_PATH]; memset(szFolder, 0, sizeof(szFolder)); CString strFolder = _T(""); if (pidl != NULL) { SHGetPathFromIDList(pidl, szFolder); //保存文件夹路径存 strFolder.Format(_T("%s"), szFolder); afxMessageBox(strFolder); } else { return; }}
⑤ mfc 如何复制文件到文件夹
主要有两个难点:
1、如何选择文件;
2、选择好文件之后,如果复制;
1st、关于文件选择,可参考下面这段代码:
CString CDcPackerDlg::BootOpenDialog() //返回选择的文件名称
{
CString strFile = _T("");
CFileDialog dlgFile(TRUE, NULL, NULL, OFN_HIDEREADONLY, _T("Describe Files (*.cfg)|*.cfg|All Files (*.*)|*.*||"), NULL);
if (dlgFile.DoModal())
{
strFile = dlgFile.GetPathName();
}
return strFile;
}
//加载文件按钮
void CDcPackerDlg::OnBnClickedSelectdec()
{
// TODO: Add your control notification handler code here
m_strDescPath = ""; //类的成员变量
//"打开文件"对话框,选择文件,返回其路径
m_strDescPath = BootOpenDialog();
}
2nd、文件复制:
2.1 获得程序目录
CString strPath = "", strDir = "";
char filepath[MAX_PATH];
GetMoleFileName(NULL, filepath, MAX_PATH);
strDir.Format("%s", filepath);
strPath = strDir.Left(strDir.ReverseFind('\\'));
2.2 复制文件
在MFC下可以用CopyFile()函数,定义如下:
BOOL CopyFile(
LPCTSTR lpExistingFileName, //原文件地址,包括文件名
LPCTSTR lpNewFileName, ////目的文件地址,包括文件名
BOOL bFailIfExists //如果目的文件存在的操作
);
3rd、自己把上面给的代码组装一下,就可以满足你的要求了。
打字不易,如满意,望采纳。