这个 CFile对象还没打开一个文件就拿来用了。
看下MSDN上CFile类的说明,创建CFile对象的时候要么用带参数的构造函数来打开一个文件,要么用 CFile::Open方法。
CFile::CFile
CFile( )
CFile(int hFile)
CFile(LPCTSTR
lpszFileName,UINT nOpenFlags)
throw(CFileException)
参数:
hFile已打开的文件句柄。
lpszFileName所需文件的路径字符串,此路径可为相对的也可为绝对的路径。
nOpenFlags共享和访问模式,指定当打开文件时进行的动作,可以将以下所列用OR(|) *** 作符联起来。至少应有一个访问权限和一个共享选项,modeCreate和modeNoInherit是可选的。值如下所示:·
CFile::modeCreate
调用构造函数构造一个新文件,如果文件已存在,则长度变成0。
·
CFile::modeNoTruncate
此值与modeCreate组合使用。如果所创建的文件已存在则其长度不变为0。因而此文件被打开,或者作为一个新文件或者作为一个已存在的文件。这将是很有用的,例如当打开一个可能存在也可能不存在的文件时。这个选项也可用于CStdioFile.
·
CFile::modeRead
打开文件仅供读。
·
CFile::modeReadWrite
打开文件供读写。
·
CFile::modeWrite
打开文件仅供写。
·
CFile::modeNoInherit
阻止文件被子进程继承。
·
CFile::ShareDenyNone
不禁止其它进程读或写访问,打开文件。如果文件已被其它进程以兼容模式打开,则Create失败。
·
CFile::ShareDenyRead
打开文件,禁止其它进程读此文件。如果文件已被其它进程以兼容模式打开,或被其它进程读,则Create失败。
·
CFile::ShareDenyWrite
打开文件,禁止其它进程写此文件。如果文件已被其它进程以兼容模式打开,或被其它进程写,则Create失败。
·
CFile::ShareExclusive
以独占模式打开文件,禁止其它进程对文件的读写。如果文件已经以其它模式打开读写(即使被当前进程),则构造失败。
·
CFile::ShareCompat
此标志在32位MFC中无效。此标志在使用CFile::Open时映射为CFile::ShareExclusive。
·
CFile::typeText
对回车换行设置特殊进程(仅用于派生类)。
·
CFile::typeBinary
设置二进制模式(仅用于派生类)。
说明:
缺省的构造函数不打开文件,而是将m_hFile设置为CFile::hFileNull。因为此构造函数不产生异常,故不使用TRY/CATCH逻辑 *** 作。使用Open成员函数,然后直接测试异常状态。有关异常处理的策略,可参阅联机文档“Visual
C++程序员指南”中的“异常”。
带一个参数的构造函数构造一个CFile对象,对应于由hFile标识的 *** 作系统文件。对访问模式或文件类型不作检查。当CFile对象被析构时, *** 作系统文件不会关闭,必须手工关闭它。
带两个参数的构造函数构造一个CFile对象,并打开给定路径的相对应的 *** 作系统文件。构造函数将第一个构造函数和Open成员函数组合起来。当打开文件出错时产生一个异常。通常这说明这种错误不可解决,用户将被警告。
示例:
//
example for CFile::CFile
char* pFileName = "test.dat"
TRY
{
CFile
f(pFileName, CFile::modeCreate |
CFile::modeWrite)
}
CATCH(CFileException,e)
{
#ifdef
_DEBUG
afxDump<<"File could not be
opened"<<e->m_cause<<"\n"
#endif
}
END_CATCH
在MFC中,使用CFileFind类,可以枚举一个目录下的所有文件和子目录。
示例:
void ListFolder(const CString & sPath){
CFileFind ff
BOOL bFound = ff.FindFile(sPath + "\\*.*")
while(bFound)
{
bFound = ff.FindNextFile()
if(ff.IsDirectory()) //是目录
{
if(!ff.IsDots()) //不是本级目录或父目录(.和..)
ListFolder(ff.GetFilePath()) //递归子目录
}
else
{
AfxMessageBox("文件:" + ff.GetFilePath())
}
}
ff.Close()
}
windows下枚举文件的函数只需要两个就可以 FindFirstFile FindNextFile,用法很简单,有两个参数一个是目录的路径,一个是得到的信息,返回值是用来查找下一文件或文件夹的句柄。。它相当于枚举器,足够你遍历一个盘下的所有文件信息了。。。你得到的文件信息只要判断后缀是不是wav即可。。。是就保存,不是就跳过,你不能指望通过一个不是你自己写的函数就一步达到你希望的结果。。。函数用法查MSDN或者百度也行,一两句说不清楚。。。
MFC下还有一个CFindFile的类,他只是对上述API的功能封装,但用法简单许多,MSDN也有说明,至于是否只有一个无所谓,你就是100个也能全部得到了。。。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)