CFile::Open
已重载。Open 旨在用于默认 CFile 构造函数的使用。
virtual BOOL Open(
LPCTSTR lpszFileName,
UINT nOpenFlags,
CFileException* pError = NULL
);
virtual BOOL Open(
LPCTSTR lpszFileName,
UINT nOpenFlags,
CAtlTransactionManager* pTM,
CFileException* pError = NULL
);
参数
lpszFileName
是路径所需文件的字符串。路径可以是相对路径,绝对或网络名称 (UNC)。nOpenFlags
定义文件共享和访问模式 UINT。因此,在打开文件时,它指定该操作。您可以合并选项使用按位或(|)运算符。需要一种访问权限和一个股票选择; modeCreate 和 modeNoInherit 模式是可选的。对模式的选项列表参见 C文件 构造函数。pError
要接收失败的操作状态的现有文件异常对象的指针。pTM
为CAtlTransactionManager对象的指针
返回值
非零,则打开成功;否则为0。才返回0,pError 参数是有意义的。
备注
两个函数窗体打开的失败是普通的文件,预期的条件一个“安全”方法。
当 CFile 构造函数都将在出错时的异常,Open 将返回错误条件的 FALSE。但是Open 仍可以初始化 CFileException 对象描述错误。如果您没有提供 pError 参数,或者,如果您通过 pError的 NULL,Open 将返回 FALSE 并且不会引发 CFileException。如果通过指向现有 CFileException和 Open 遇到错误,该功能由描述该错误的信息将加载它。在这两个条件都不用例请将 Open 引发异常。
下表描述 Open的可能结果。
pError |
遇到的错误? |
返回值 |
CFileException内容 |
---|---|---|---|
NULL |
否 |
TRUE |
无 |
为 CFileException的PTR |
否 |
TRUE |
保持不变。 |
NULL |
是 |
FALSE |
无 |
为 CFileException的PTR |
是 |
FALSE |
初始化描述错误 |
示例
CFile f;
CFileException e;
TCHAR* pszFileName = _T("Open_File.dat");
if(!f.Open(pszFileName, CFile::modeCreate | CFile::modeWrite, &e))
{
TRACE(_T("File could not be opened %d\n"), e.m_cause);
}
//A second example for CFile::Open.
//This function uses CFile to copy binary files.
bool BinaryFileCopy(LPCTSTR pszSource, LPCTSTR pszDest)
{
// constructing these file objects doesn't open them
CFile sourceFile;
CFile destFile;
// we'll use a CFileException object to get error information
CFileException ex;
// open the source file for reading
if (!sourceFile.Open(pszSource,
CFile::modeRead | CFile::shareDenyWrite, &ex))
{
// complain if an error happened
// no need to delete the ex object
TCHAR szError[1024];
ex.GetErrorMessage(szError, 1024);
_tprintf_s(_T("Couldn't open source file: %1024s"), szError);
return false;
}
else
{
if (!destFile.Open(pszDest, CFile::modeWrite |
CFile::shareExclusive | CFile::modeCreate, &ex))
{
TCHAR szError[1024];
ex.GetErrorMessage(szError, 1024);
_tprintf_s(_T("Couldn't open source file: %1024s"), szError);
sourceFile.Close();
return false;
}
BYTE buffer[4096];
DWORD dwRead;
// Read in 4096-byte blocks,
// remember how many bytes were actually read,
// and try to write that many out. This loop ends
// when there are no more bytes to read.
do
{
dwRead = sourceFile.Read(buffer, 4096);
destFile.Write(buffer, dwRead);
}
while (dwRead > 0);
// Close both files
destFile.Close();
sourceFile.Close();
}
return true;
}
要求
Header: afx.h