CFile::Open
Di overload.Apri è progettato per l'utilizzo con il costruttore predefinito CFile.
virtual BOOL Open(
LPCTSTR lpszFileName,
UINT nOpenFlags,
CFileException* pError = NULL
);
virtual BOOL Open(
LPCTSTR lpszFileName,
UINT nOpenFlags,
CAtlTransactionManager* pTM,
CFileException* pError = NULL
);
Parametri
lpszFileName
Stringa che rappresenta il percorso del file desiderato.Il percorso può essere relativo, assoluto, o un nome di rete (UNC).nOpenFlags
uint Che definisce la condivisione e la modalità di accesso al file.Specifica l'azione da eseguire quando viene aperto il file.È possibile combinare le opzioni utilizzando bit per bit (OR**|**Operatore).Un'autorizzazione di accesso e un'opzione di condivisione sono necessarie; le modalità modeNoInherit e modeCreate sono facoltative.Vedere il costruttore file C per un elenco di opzioni di sistema.pError
Un puntatore a un oggetto esistente di eccezione di file che riceverà lo stato di un'operazione non riuscita.pTM
Puntatore all'oggetto di CAtlTransactionManager
Valore restituito
Diverso da zero se il comando apri è riuscita, in caso contrario 0.Il parametro pError è significativo solo se 0 viene restituito.
Note
Le due funzioni costituiscono un metodo "sicuro" per aprire un file in cui un errore è uno stato normale e previsto.
Mentre il costruttore CFile genererà un'eccezione in una condizione di errore, Apri restituirà FALSE per le condizioni di errore.Apri può comunque inizializzare un oggetto CFileException per descrivere l'errore, tuttavia.Se non si fornisce il parametro pError, o se si passa NULL per pError, Apri restituirà FALSE e non genererà CFileException.Se si passa un puntatore a CFileExceptionesistente e rileva Apri un errore, la funzione lo riempie di informazioni relative all'errore.In nessuno dei due caso la generazione Apri un'eccezione.
La tabella seguente vengono descritti i risultati possibili Apri.
pError |
Errore rilevato? |
Valore restituito |
Contenuto di CFileException |
---|---|---|---|
NULL |
No |
TRUE |
n/d |
stampante a CFileException |
No |
TRUE |
invariato |
NULL |
Sì |
FALSE |
n/d |
stampante a CFileException |
Sì |
FALSE |
inizializzato per descrivere errore |
Esempio
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;
}
Requisiti
Header: afx.h