CFile::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
A UINT 는 파일의 공유 및 액세스 모드를 정의 합니다. 파일을 열 때 수행할 작업을 지정 합니다. 비트 OR (사용 하 여 옵션을 결합할 수 있습니다. |) 연산자. 액세스 권한 및 하나의 공유 옵션 필수입니다. modeCreate 및 modeNoInherit 모드는 선택 사항입니다. 참조는 CFile 생성자 모드 옵션의 목록.pError
실패 한 작업의 상태를 받는 기존 예외 파일 개체에 대 한 포인터입니다.pTM
CAtlTransactionManager 개체에 대 한 포인터
반환 값
열기에 성공 하면 0이 아닌. 그렇지 않으면 0입니다. pError 매개 변수는 0을 반환 하면 의미 있는입니다.
설명
"안전" 정상적이 고 예상 조건 오류가 있는 파일을 열 방법을 두 가지 기능을 형성 합니다.
동안에 CFile 생성자는 오류 조건에서 예외를 발생 합니다 열려 반환 합니다 FALSE 오류 조건에 대 한. 하지만 열기 여전히 초기화할 수는 CFileException 오류를 설명 하는 개체입니다. 지정 하지 않은 경우는 pError 매개 변수를 전달 하는 경우 또는 NULL 에 pError, 열기 반환 합니다 FALSE throw 하지는 CFileException. 기존에 포인터를 전달 하는 경우 CFileException, 및 열려 만나는 오류 함수 됩니다 채우기가 해당 오류를 설명 하는 정보를 합니다. 두 사례는에서 열려 예외를 throw 합니다.
다음 표에서 가능한 결과의 열려.
pError |
오류가 발생 했습니다. |
반환 값 |
CFileException 콘텐츠 |
---|---|---|---|
NULL |
아니요 |
TRUE |
n/a |
ptr에CFileException |
아니요 |
TRUE |
변경 하지 않고 |
NULL |
예 |
FALSE |
n/a |
ptr에CFileException |
예 |
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;
}
요구 사항
헤더: afx.h