Partager via


CFile::Open

Surchargé. Ouvrir est destiné à une utilisation avec le constructeur par défaut d' CFile .

virtual BOOL Open( 
   LPCTSTR lpszFileName, 
   UINT nOpenFlags, 
   CFileException* pError = NULL  
); 
virtual BOOL Open( 
   LPCTSTR lpszFileName, 
   UINT nOpenFlags, 
   CAtlTransactionManager* pTM, 
   CFileException* pError = NULL 
);

Paramètres

  • lpszFileName
    Une chaîne qui est le chemin d'accès au fichier souhaité. Le chemin d'accès peut être parent, absolu, ou un nom réseau UNC ().

  • nOpenFlags
    uint Qui définit le partage de fichier et le mode d'accès. Il spécifie l'action à effectuer en ouvrant le fichier. Vous pouvez combiner des options à l'aide de opérateurs de bits OR ( **|**Opérateur). Une autorisation d'accès et une option de partage sont requises ; les modes de modeCreate et de modeNoInherit sont facultatifs. Consultez le constructeur de fichier C pour une liste d'options d'état.

  • pError
    Un pointeur vers un objet existant d'exception de fichier qui recevra l'état d'une opération ayant échoué.

  • pTM
    Pointeur vers l'objet de CAtlTransactionManager

Valeur de retour

Une valeur différente de zéro si l'ouverture a réussi ; sinon 0. Le paramètre d' pError est pertinent uniquement si 0 est retourné.

Notes

Les deux fonctions forment une méthode « sécurisée » pour ouvrir un fichier où une erreur est une normale, état attendu.

Lorsque le constructeur d' CFile lève une exception dans une condition d'erreur, Ouvrir retourne FALSE pour les conditions d'erreur. Ouvrir peut toujours initialiser un objet de CFileException pour décrire l'erreur, cependant. Si vous ne fournissez pas le paramètre d' pError , ou si vous passez NULL pour pError, Ouvrir retourne FALSE et ne lève pas CFileException. Si vous passez un pointeur à CFileExceptionexistant, et les rencontre de Ouvrir une erreur, la fonction remplira d'informations décrivant cette erreur. Dans aucune de cas de Ouvrir lever une exception.

Le tableau suivant décrit les résultats possibles de Ouvrir.

pError

Erreur est survenue ?

Valeur de retour

Contenu de CFileException

NULL

Non

TRUE

N/A

prentice à CFileException

Non

TRUE

inchangé

NULL

Oui

FALSE

N/A

prentice à CFileException

Oui

FALSE

initialisé pour décrire l'erreur

Exemple

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;
}

Configuration requise

Header: afx.h

Voir aussi

Référence

CFile, classe

Graphique de la hiérarchie

CFile::CFile

CFile::Close