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