CFile::Open
Überladen.Öffnen ist für die Verwendung mit dem Standard CFile-Konstruktor vorgesehen.
virtual BOOL Open(
LPCTSTR lpszFileName,
UINT nOpenFlags,
CFileException* pError = NULL
);
virtual BOOL Open(
LPCTSTR lpszFileName,
UINT nOpenFlags,
CAtlTransactionManager* pTM,
CFileException* pError = NULL
);
Parameter
lpszFileName
Eine Zeichenfolge, die der Pfad zur gewünschten Datei ist.Der Pfad kann relativ oder absolut, ein Netzwerkname (UNC) sein.nOpenFlags
UINT, das die Freigabe und den Zugriffsmodus der Datei definiert.Es gibt die Aktion an, wenn die Datei geöffnet wird.Sie können Optionen kombinieren, indem Sie den bitweisen Operator OR verwenden (**|**Operator).Eine Zugriffsberechtigung und eine Aktienoption sind erforderlich; die modeCreate und modeNoInherit Modi sind optional.Siehe den Die C-Datei-Konstruktor für eine Liste von Modusoptionen.pError
Ein Zeiger auf einen vorhandenen DateiAusnahme Objekt, das den Status eines fehlgeschlagenen Vorgangs empfängt.pTM
Zeiger auf CAtlTransactionManager-Objekt
Rückgabewert
Ungleich 0 (null), wenn das geöffnete erfolgreich war; 0 andernfalls.Der pError-Parameter ist sinnvoll, wenn 0 zurückgegeben wird.
Hinweise
Die beiden Funktionen bilden eine "sichere" Methode zum Öffnen einer Datei, in der ein Fehler eine normale, erwartete Bedingung ist.
Während der CFile-Konstruktor eine Ausnahme in einem Fehlerzustand auslöst, gibt ÖffnenFALSE auf Fehlerzustände zurück.Öffnen kann ein CFileException-Objekt noch initialisieren, um den Fehler zu beschreiben, jedoch.Wenn Sie nicht den pError-Parameter angeben oder wenn Sie NULL für pError übergeben, gibt ÖffnenFALSE zurück und löst nicht CFileException aus.Wenn Sie einen Zeiger auf vorhandenen CFileException und Öffnen einen Fehler führen, füllt die Funktion er mit den Informationen aus, die diesen Fehler beschrieben werden.In auch nicht Fall werden Sie Öffnen muss eine Ausnahme.
Die folgende Tabelle beschreibt die möglichen Ergebnisse Öffnen.
pError |
Fehler gefunden? |
Rückgabewert |
CFileExceptions-Inhalt |
---|---|---|---|
NULL |
Nein |
TRUE |
nicht verfügbar |
PTR zu CFileException |
Nein |
TRUE |
unverändert |
NULL |
Ja |
FALSE |
nicht verfügbar |
PTR zu CFileException |
Ja |
FALSE |
initialisiert, um Fehler zu beschreiben |
Beispiel
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;
}
Anforderungen
Header: afx.h