CFile::Open
Przeciążone.Otwórz jest przeznaczony dla domyślnie CFile konstruktora.
virtual BOOL Open(
LPCTSTR lpszFileName,
UINT nOpenFlags,
CFileException* pError = NULL
);
virtual BOOL Open(
LPCTSTR lpszFileName,
UINT nOpenFlags,
CAtlTransactionManager* pTM,
CFileException* pError = NULL
);
Parametry
lpszFileName
Ciąg jest ścieżką do pliku.Ścieżka może być względna, bezwzględna lub nazwę sieciową (UNC).nOpenFlags
A UINT definiuje tryb udostępniania i dostępu pliku.Określa akcję wykonywaną po otwarciu pliku.Opcje można połączyć za pomocą (logiczną lub**|**) operatora.Wymagane są uprawnienia dostępu do jednego i jeden udział opcji; modeCreate i modeNoInherit tryby są opcjonalne.Zobacz CFile konstruktora dla opcji tryb.pError
Wskaźnik do istniejącego obiektu pliku wyjątek zostanie wyświetlony stan operacji nie powiodło się.pTM
Wskaźnik do obiektu CAtlTransactionManager
Wartość zwracana
Niezerowa, jeśli Otwórz zakończyła się pomyślnie; 0 inaczej.pError Parametr ma znaczenie tylko wtedy, gdy zwracane jest 0.
Uwagi
Dwie funkcje formularza "bezpieczne" metoda otwierania pliku, gdzie uszkodzenie jest normalna, oczekiwane warunek.
Podczas CFile Konstruktor wygeneruje wyjątek warunek błędu Otwórz zwróci FALSE warunków błędów.Otwórz nadal można zainicjować CFileException Obiekt opisujący błąd, jednak.Jeśli nie pError parametr, lub jeśli przekaże NULL dla pError, Otwórz zwróci FALSE i nie CFileException.Jeśli przekazuje się wskaźnik do istniejącego CFileException, i Otwórz napotyka błąd, funkcja będzie jednak wypełnić informacje opisujące tego błędu.W ani sprawa będzie Otwórz Zgłoś wyjątek.
W poniższej tabeli opisano możliwe wyniki Otwórz.
pError |
Wystąpił błąd? |
Zwracana wartość |
Zawartość CFileException |
---|---|---|---|
WARTOŚĆ NULL |
Nr |
PRAWDA |
Brak |
PTR doCFileException |
Nr |
PRAWDA |
bez zmian |
WARTOŚĆ NULL |
Tak |
FAŁSZ |
Brak |
PTR doCFileException |
Tak |
FAŁSZ |
zainicjowane do opisu błędu |
Przykład
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;
}
Wymagania
Nagłówek: afx.h