MFC文件操作
一,打开文件对话框
CString szFilters=_T(\"txt Files (*.txt)\");
CFileDialog fileDlg(TRUE, _T(\"txt\"), _T(\"*.txt\"), OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilters, NULL);
if(fileDlg.DoModal() == IDOK){
CString filestr;
}; filestr = fileDlg.GetPathName(); //得到打开的文件的全路径+后缀
二,打开文件
CFile::CFile( LPCTSTR lpszFileName, UINT nOpenFlags ); //CFile构造
lpszFileName文件名
nOpenFlags打开方式,有:
CFile::modeCreate:以新建方式打开,如果文件不存在,新建;如果文件已存在,把该文件长度置零,即清除文件原有内容。
CFile::modeRead:只读。
CFile::modeWrite:只写。
CFile::modeReadWrite:以读写方式打开文件。
CFile::modeNoTruncate:以追加方式打开,如果文件存在,打开并且不将文件长度置零,如果文件不存在,会抛出异常。一般与CFile::modeCreate一起使用,则文件不存在时,新建一个文件;存在就进行追加操作(其追加是从起始位置进行覆盖式追加的,所以要与定位配合操作)。
例:1,利用CFile的构造函数打开文件
filestr = _T(\"C:\\\\Users\\\\zktw\\\\Desktop\\\\new.txt\");//或用一中获得的路径
CFile RWFile(filestr,CFile::modeCreate | CFile::modeReadWrite | CFile::modeNoTruncate); 例2:利用CFile的成员函数
CFilemyfile;
Myfile.open(_T(“路径”), CFile::modeCreate | CFile::modeReadWrite | CFile::modeNoTruncate);
三,文件读写操作
读操作
CFile::Read( void* lpBuf, UINT nCount );从lpBuf指向的地址开始读取nCount 个字节,指针也自动下移nCount
写操作
CFile::Write( const void* lpBuf, UINT nCount );向lpBuf指向的内存地址写入nCount 个字节,指针也自动下移nCount
四,定位
CFile::Seek( LONG lOff, UINT nFrom );从指定位nFrom置偏移lOff字节.nFrom有三种方式,如:
CFile::begin从文件开始移动
CFile::current从当前位置移动
CFile::end从文件末位移动,此时lOff为负值.例: CFile::Seek(0, CFile::end);//定位文件尾
五,关闭打开的文件
CFile::Close();//关闭文件,删除对象,再次对文件读写时必须重新定义对象
六,查找文件是否存在(CFileFind的成员函数)
CStringstrFileTitle;
CFileFindfinder;
BOOLbWorking = finder.FindFile(_T(\"C:\\\\Users\\\\zktw\\\\Desktop\\\\new.txt\"));
if(bWorking)
{
AfxMeageBox(_T(“文件已存在”);
}
else
AfxMeageBox(_T(“文件不存在”));
finder.close();//结束查找请求释放资源,但是再次发出查找请求时不需要重新定义//CFileFind对象如下:
bWorking = finder.FindFile(_T(\"C:\\\\Users\\\\zktw\\\\Desktop\\\\new1.txt\"));
。。。。
finder.close();
CFileFind封装了许多非常有用的成员函数 可以百度一下。
七,创建文件夹
CreateDirectory(_T“路径”,NULL);第一个参数值为文件夹名称,第二个参数值为安全属性,一般设置为NULL即可。如果正确创建,返回值为1,如果没有正常创建文件夹,则返回0。
特别的:该函数每次调用时都只能创建一级文件夹,即文件夹中不能再包含子文件夹。当希望创建含有子文件夹的文件夹时,可以先使用该函数创建一级文件夹,然后再使用该函数在一级文件夹下创建子文件夹。
八,删除文件
DeleteFile(_T(“路径”));
九,删除文件夹
RemoveDirectory(_T(“路径”)); //文件夹内没有文件时才会删除成功,可以无限查找”.”带.//文件然后都删除掉,再删除文件夹
十,复制文件
CopyFile(_T(路径),_T(路径),true);//true:目标不能已存在。False:目标可以已存在 例:CopyFile(_T(\"C:\\\\Users\\\\zktw\\\\Desktop\\\\new.txt\"), _T(\"d:\\\\new\\\\new.txt\"), TRUE);
十一,移动文件或文件夹
MoveFile(_T(路径),_T(路径));//同一目录下即是重命名,移动的时候也可以重命名//移动文件夹时只能在同一盘操作
例:MoveFile(_T(\"C:\\\\Users\\\\zktw\\\\Desktop\\\\new.txt\"), _T(\"d:\\\\new\\\\new.txt\"));//移动文件 MoveFile(_T(\"d:\\\\abc\"), _T(\"d:\\\\new\\\\abc\"));//文件夹移动
注:加粗的文件或文件夹不能已存在
十二,复制一个文件夹下所有的文件到另一个目录
CFileFind finder;
CString straddr;
CString strname;
BOOL bfind;
bfind = finder.FindFile(_T(\"C:\\\\Users\\\\zktw\\\\Desktop\\\\abc\\\\*.*\"));
while(bfind)
{
bfind = finder.FindNextFile();
straddr.Format(_T(\"%s\"), finder.GetFilePath());
strname.Format(_T(\"d:\\\\new\\\\%s\"), finder.GetFileName());
//MoveFile(straddr, strname); //移动
CopyFile(straddr, strname, TRUE); //复制
}
finder.Close();