Share via


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

Siehe auch

Referenz

CFile-Klasse

Hierarchiediagramm

CFile::CFile

CFile::Close