CFile::CFile
构造并初始化一个 CFile 对象。
CFile( ); CFile( CAtlTransactionManager* pTM ); CFile( HANDLE hFile ); CFile( LPCTSTR lpszFileName, UINT nOpenFlags ); CFile( LPCTSTR lpszFileName, UINT nOpenFlags, CAtlTransactionManager* pTM );
参数
hFile
要附加到 CFile 对象的文件的句柄。lpszFileName
要附加到 CFile 对象的文件的相对路径或完整路径。nOpenFlags
指定文件的文件访问选项的按位组合 (OR)。 有关可能的选项,请参阅“备注”部分。pTM
指向 CAtlTransactionManager 对象的指针
备注
下面的五个表列出了 nOpenFlags 参数可能的选项。
仅选择下列文件访问模式选项之一。 默认文件访问模式为 CFile::modeRead,该模式为只读模式。
值 |
描述 |
---|---|
CFile::modeRead |
只请求读取访问权限。 |
CFile::modeWrite |
只请求写入访问权限。 |
CFile::modeReadWrite |
请求读写访问权限。 |
选择以下字符模式选项之一。
值 |
描述 |
---|---|
CFile::typeBinary |
设置二元模式(仅在派生类中使用)。 |
CFile::typeText |
通过对回车-换行对进行特殊处理,来设置文本模式(仅在派生类中使用)。 |
CFile::typeUnicode |
设置 Unicode 模式(仅在派生类中使用)。 当应用程序在 Unicode 配置中生成时,文本将以 Unicode 格式写入文件中。 不会将 BOM 写入该文件中。 |
仅选择下列文件共享模式选项之一。 默认文件共享模式为 CFile::shareExclusive,该模式是独占模式。
值 |
描述 |
---|---|
CFile::shareDenyNone |
没有任何共享限制。 |
CFile::shareDenyRead |
拒绝向所有其他用户提供读取访问权限。 |
CFile::shareDenyWrite |
拒绝向所有其他用户提供写入访问权限。 |
CFile::shareExclusive |
拒绝向所有其他用户提供读写访问权限。 |
选择下面的第一个(或全选)文件创建模式选项。 默认创建模式为 CFile::modeNoTruncate,该模式当前处于打开状态。
值 |
描述 |
---|---|
CFile::modeCreate |
若文件不存在,则创建新文件;若该文件已存在,则引发 CFileException。 |
CFile::modeNoTruncate |
若文件不存在,则创建新文件;否则,如果该文件已存在,则将其附加到 CFile 对象。 |
按照描述选择以下文件缓存选项。 默认情况下,系统将使用通用的缓存方案,该方案不可用作选项。
值 |
描述 |
---|---|
CFile::osNoBuffer |
系统没有为文件使用中间缓存。 此选项取消以下 2 个选项。 |
CFile::osRandomAccess |
文件缓存针对随机访问进行了优化。 不要使用此选项和顺序扫描选项。 |
CFile::osSequentialScan |
文件缓存针对顺序访问进行了优化。 不要使用此选项和随机访问选项。 |
CFile::osWriteThrough |
立即执行写入操作。 |
选择下列安全选项以防止继承文件句柄。 默认情况下,所有新的子进程都可以使用文件句柄。
值 |
描述 |
---|---|
CFile::modeNoInherit |
阻止任何子进程使用文件句柄。 |
默认构造函数将初始化成员,但不会将文件附加到 CFile 对象。 在使用此构造函数后,使用 CFile::Open 方法打开文件并将其附加到 CFile 对象。
带有一个参数的构造函数将初始化成员,并且将现有文件附加到 CFile 对象。
带有两个参数的构造函数将初始化成员并尝试打开指定文件。 若此构造函数成功打开指定文件,则该文件将附加到 CFile 对象;否则,此构造函数将引发指向 CInvalidArgException 对象的指针。 有关如何处理异常的详细信息,请参阅异常。
如果 CFile 对象成功打开指定文件,则它将在 CFile 对象被销毁时自动关闭该文件;否则,你必须在不再将其附加到 CFile 对象之后显式关闭该文件。
示例
下面的代码演示如何使用 CFile。
HANDLE hFile = CreateFile(_T("CFile_File.dat"),
GENERIC_WRITE, FILE_SHARE_READ,
NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
AfxMessageBox(_T("Couldn't create the file!"));
}
else
{
// Attach a CFile object to the handle we have.
CFile myFile(hFile);
static const TCHAR sz[] = _T("I love CFile!");
// write string
myFile.Write(sz, sizeof(sz));
// We can call Close() explicitly, but the destructor would have
// also closed the file for us. Note that there's no need to
// call the CloseHandle() on the handle returned by the API because
// MFC will close it for us.
myFile.Close();
要求
**标头:**afx.h