MFC 指定文件夹保存文件且自动命名问题。

MFC 指定文件夹保存文件且自动命名问题。,第1张

CFile savfile

这个 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个也能全部得到了。。。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11864802.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存