Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
A classe base para classes de arquivo Microsoft Foundation Class.
Sintaxe
class CFile : public CObject
Membros
Construtores Públicos
| Nome | Descrição |
|---|---|
| CFile::CFile | Constrói um CFile objeto a partir de um caminho ou identificador de arquivo. |
Métodos Públicos
| Nome | Descrição |
|---|---|
| CFile::Abortar | Fecha um arquivo ignorando todos os avisos e erros. |
| CFile::Fechar | Fecha um arquivo e exclui o objeto. |
| CFile::D uplicate | Constrói um objeto duplicado com base nesse arquivo. |
| CFile::Flush | Libera todos os dados ainda a serem gravados. |
| CFile::GetFileName | Recupera o nome do arquivo selecionado. |
| CFile::GetFilePath | Recupera o caminho completo do arquivo selecionado. |
| CFile::GetFileTitle | Recupera o título do arquivo selecionado. |
| CFile::GetLength | Recupera o comprimento do arquivo. |
| CFile::GetPosition | Recupera o ponteiro do arquivo atual. |
| CFile::GetStatus | Recupera o status do arquivo aberto ou, na versão estática, recupera o status do arquivo especificado (estático, função virtual). |
| CFile::LockRange | Bloqueia um intervalo de bytes em um arquivo. |
| CFile::Aberto | Abre com segurança um ficheiro com uma opção de teste de erros. |
| CFile::Ler | Lê dados (sem buffer) de um arquivo na posição de arquivo atual. |
| CFile::Remover | Exclui o arquivo especificado (função estática). |
| CFile::Renomear | Renomeia o arquivo especificado (função estática). |
| CFile::Procurar | Posiciona o ponteiro do arquivo atual. |
| CFile::SeekToBegin | Posiciona o ponteiro do arquivo atual no início do arquivo. |
| CFile::SeekToEnd | Posiciona o ponteiro do arquivo atual no final do arquivo. |
| CFile::SetFilePath | Define o caminho completo do arquivo selecionado. |
| CFile::SetLength | Altera o comprimento do arquivo. |
| CFile::SetStatus | Define o status do arquivo especificado (estático, função virtual). |
| CFile::UnlockRange | Desbloqueia um intervalo de bytes em um arquivo. |
| CFile::Escrever | Grava dados (sem buffer) em um arquivo na posição atual do arquivo. |
Operadores Públicos
| Nome | Descrição |
|---|---|
| CFile::operador HANDLE | Um identificador para um CFile objeto. |
Membros de Dados Públicos
| Nome | Descrição |
|---|---|
| CFile::hFileNull | Determina se o CFile objeto tem um identificador válido. |
| CFile::m_hFile | Geralmente contém o identificador de arquivo do sistema operacional. |
Membros de Dados Protegidos
| Nome | Descrição |
|---|---|
| CFile::m_pTM | Ponteiro para objeto CAtlTransactionManager . |
Observações
Ele fornece diretamente serviços de entrada/saída de disco binário sem buffer e suporta indiretamente arquivos de texto e arquivos de memória através de suas classes derivadas.
CFile funciona em conjunto com a CArchive classe para oferecer suporte à serialização de objetos Microsoft Foundation Class.
A relação hierárquica entre essa classe e suas classes derivadas permite que seu programa opere em todos os objetos de arquivo através da interface polimórfica CFile . Um arquivo de memória, por exemplo, se comporta como um arquivo de disco.
Use CFile e suas classes derivadas para E/S de disco de uso geral. Use ofstream ou outras classes da Microsoft iostream para texto formatado enviado para um arquivo de disco.
Normalmente, um arquivo de disco é aberto automaticamente na CFile construção e fechado na destruição. As funções de membro estático permitem que você interrogue o status de um arquivo sem abri-lo.
Para obter mais informações sobre como usar CFileo , consulte os artigos Arquivos no MFC e Tratamento de arquivos na Referência da bibliotecaRun-Time.
Hierarquia de herança
CFile
Requerimentos
Cabeçalho: afx.h
CFile::Abortar
Fecha o arquivo associado a este objeto e torna o arquivo indisponível para leitura ou gravação.
virtual void Abort();
Observações
Se você não tiver fechado o arquivo antes de destruir o objeto, o destruidor o fechará para você.
Ao lidar com exceções, CFile::Abort difere de CFile::Close duas maneiras importantes. Primeiro, a Abort função não lançará uma exceção sobre falhas, porque as falhas são ignoradas pelo Abort. Em segundo lugar, Abort não ASSERT se o arquivo não tiver sido aberto ou tiver sido fechado anteriormente.
Se você usou new para alocar o CFile objeto na pilha, então você deve excluí-lo depois de fechar o arquivo.
Abort define m_hFile como CFile::hFileNull.
Exemplo
CStdioFile fileTest;
TCHAR* pszFileName = _T("Abort_File.dat");
// do stuff that may cause exceptions
CFileException ex;
if (!fileTest.Open(pszFileName, CFile::modeWrite, &ex))
{
ex.ReportError();
fileTest.Abort(); // close file safely and quietly
}
CFile::CFile
Constrói e inicializa um objeto CFile.
CFile();
CFile(CAtlTransactionManager* pTM);
CFile(HANDLE hFile);
CFile(
LPCTSTR lpszFileName,
UINT nOpenFlags);
CFile(
LPCTSTR lpszFileName,
UINT nOpenFlags,
CAtlTransactionManager* pTM);
Parâmetros
hArquivo
Identificador de um arquivo a ser anexado CFile ao objeto.
lpszFileName
Caminho relativo ou completo de um arquivo a ser anexado CFile ao objeto.
nOpenFlags
Combinação bit a bit (OR) de opções de acesso a arquivos para o arquivo especificado. Consulte a secção Observações para obter as opções possíveis.
pTM
Ponteiro para o objeto CAtlTransactionManager
Observações
As cinco tabelas a seguir listam as opções possíveis para o parâmetro nOpenFlags .
Escolha apenas uma das seguintes opções de modo de acesso a ficheiros. O modo de acesso a arquivos padrão é CFile::modeRead, que é somente leitura.
| Valor | Descrição |
|---|---|
CFile::modeRead |
Solicita somente acesso de leitura. |
CFile::modeWrite |
Solicita somente acesso de gravação. |
CFile::modeReadWrite |
Solicita acesso de leitura e gravação. |
Escolha uma das seguintes opções de modo de caractere.
| Valor | Descrição |
|---|---|
CFile::typeBinary |
Define o modo binário (usado apenas em classes derivadas). |
CFile::typeText |
Define o modo de texto com processamento especial para pares de alimentação de linha de retorno de carro (usado apenas em classes derivadas). |
CFile::typeUnicode |
Define o modo Unicode (usado apenas em classes derivadas). O texto é gravado no arquivo no formato Unicode quando o aplicativo é criado em uma configuração Unicode. Nenhuma lista técnica é gravada no arquivo. |
Escolha apenas uma das seguintes opções de modo de compartilhamento de arquivos. O modo de compartilhamento de arquivos padrão é CFile::shareExclusive, que é exclusivo.
| Valor | Descrição |
|---|---|
CFile::shareDenyNone |
Sem restrições de partilha. |
CFile::shareDenyRead |
Nega acesso de leitura a todos os outros. |
CFile::shareDenyWrite |
Nega acesso de escrita a todos os outros. |
CFile::shareExclusive |
Nega acesso de leitura e gravação a todos os outros. |
Escolha a primeira, ou ambas, das seguintes opções de modo de criação de arquivo. O modo de criação padrão é CFile::modeNoTruncate, que está aberto existindo.
| Valor | Descrição |
|---|---|
CFile::modeCreate |
Cria um novo arquivo se nenhum arquivo existir. Se o arquivo já existir, ele será substituído e inicialmente definido como comprimento zero. |
CFile::modeNoTruncate |
Cria um novo arquivo se nenhum arquivo existir; caso contrário, se o arquivo já existir, ele será anexado CFile ao objeto. |
Escolha as seguintes opções de cache de arquivo, conforme descrito. Por padrão, o sistema usa um esquema de cache de uso geral que não está disponível como opção.
| Valor | Descrição |
|---|---|
CFile::osNoBuffer |
O sistema não usa um cache intermediário para o arquivo. Esta opção cancela as 2 opções seguintes. |
CFile::osRandomAccess |
O cache de arquivos é otimizado para acesso aleatório. Não use essa opção e a opção de verificação sequencial. |
CFile::osSequentialScan |
O cache de arquivos é otimizado para acesso sequencial. Não use esta opção e a opção de acesso aleatório. |
CFile::osWriteThrough |
As operações de gravação são feitas sem demora. |
Escolha a seguinte opção de segurança para impedir que o identificador de arquivo seja herdado. Por padrão, qualquer novo processo filho pode usar o identificador de arquivo.
| Valor | Descrição |
|---|---|
CFile::modeNoInherit |
Impede que qualquer processo filho use o identificador de arquivo. |
O construtor padrão inicializa membros, mas não anexa um arquivo ao CFile objeto. Depois de usar esse construtor, use o método CFile::Open para abrir um arquivo e anexá-lo ao CFile objeto.
O construtor com um parâmetro inicializa membros e anexa um arquivo existente ao CFile objeto.
O construtor com dois parâmetros inicializa membros e tenta abrir o arquivo especificado. Se este construtor abrir com êxito o arquivo especificado, o arquivo é anexado CFile ao objeto, caso contrário, este construtor lança um ponteiro para um CInvalidArgException objeto. Para obter mais informações sobre como lidar com exceções, consulte Exceções.
Se um CFile objeto abrir com êxito um arquivo especificado, ele fechará esse arquivo automaticamente quando o CFile objeto for destruído, caso contrário, você deverá fechar explicitamente o arquivo depois que ele não estiver mais anexado CFile ao objeto.
Exemplo
O código a seguir mostra como usar um CFilearquivo .
HANDLE hFile = CreateFile(_T("CFile_File.dat"),
GENERIC_WRITE, FILE_SHARE_READ,
NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
AfxMessageBox(_T("Couldn't create the file!"));
}
else
{
// Attach a CFile object to the handle we have.
CFile myFile(hFile);
static const TCHAR sz[] = _T("I love CFile!");
// write string
myFile.Write(sz, sizeof(sz));
// We need to call Close() explicitly. Note that there's no need to
// call CloseHandle() on the handle returned by the API because
// Close() automatically calls CloseHandle() for us.
myFile.Close();
CFile::Fechar
Fecha o arquivo associado a este objeto e torna o arquivo indisponível para leitura ou gravação.
virtual void Close();
Observações
Se você não tiver fechado o arquivo antes de destruir o objeto, o destruidor o fechará para você.
Se você usou new para alocar o CFile objeto na pilha, então você deve excluí-lo depois de fechar o arquivo.
Close define m_hFile como CFile::hFileNull.
Exemplo
Veja o exemplo de CFile::CFile.
CFile::D uplicate
Constrói um objeto duplicado CFile para um determinado arquivo.
virtual CFile* Duplicate() const;
Valor de retorno
Um ponteiro para um objeto duplicado CFile .
Observações
Esta função é equivalente à função _dupde tempo de execução C.
CFile::Flush
Força todos os dados restantes no buffer de arquivos a serem gravados no arquivo.
virtual void Flush();
Observações
O uso de Flush não garante a lavagem de CArchive buffers. Se você estiver usando um arquivo, chame CArchive::Flush primeiro.
Exemplo
Veja o exemplo de CFile::SetFilePath.
CFile::GetFileName
Chame essa função de membro para recuperar o nome de um arquivo especificado.
virtual CString GetFileName() const;
Valor de retorno
O nome do arquivo.
Observações
Por exemplo, quando você liga GetFileName para gerar uma mensagem para o usuário sobre o arquivo c:\windows\write\myfile.wri, o nome do arquivo, myfile.wri, é retornado.
Para retornar o caminho inteiro do arquivo, incluindo o nome, chame GetFilePath. Para retornar o título do arquivo (myfile), chame GetFileTitle.
Exemplo
Este fragmento de código abre o SYSTEM. INI no diretório WINDOWS. Se encontrado, o exemplo imprimirá o nome, o caminho e o título, conforme mostrado em Saída:
try
{
// try to open the file
CFile sysFile(_T("C:\\WINDOWS\\SYSTEM.INI"), CFile::modeRead);
// print out path name and title information
_tprintf_s(_T("Path is : \"%s\"\n"),
(LPCTSTR) sysFile.GetFilePath());
_tprintf_s(_T("Name is : \"%s\"\n"),
(LPCTSTR) sysFile.GetFileName());
_tprintf_s(_T("Title is: \"%s\"\n"),
(LPCTSTR) sysFile.GetFileTitle());
// close the file handle
sysFile.Close();
}
catch (CFileException* pEx)
{
// if an error occurs, just make a message box
pEx->ReportError();
pEx->Delete();
}
CFile::GetFilePath
Chame essa função de membro para recuperar o caminho completo de um arquivo especificado.
virtual CString GetFilePath() const;
Valor de retorno
O caminho completo do arquivo especificado.
Observações
Por exemplo, quando você liga GetFilePath para gerar uma mensagem para o usuário sobre o arquivo c:\windows\write\myfile.wri, o caminho do arquivo, c:\windows\write\myfile.wri, é retornado.
Para retornar apenas o nome do arquivo (myfile.wri), chame GetFileName. Para retornar o título do arquivo (myfile), chame GetFileTitle.
Exemplo
Consulte o exemplo de GetFileName.
CFile::GetFileTitle
Chame essa função de membro para recuperar o título do arquivo (o nome para exibição) do arquivo.
virtual CString GetFileTitle() const;
Valor de retorno
O título do ficheiro subjacente.
Observações
Esse método chama GetFileTitle para recuperar o título do arquivo. Se bem-sucedido, o método retorna a cadeia de caracteres que o sistema usaria para exibir o nome do arquivo para o usuário. Caso contrário, o método chama PathFindFileName para recuperar o nome do arquivo (incluindo a extensão do arquivo) do arquivo subjacente. Isso significa que a extensão do arquivo nem sempre é incluída na cadeia de caracteres de título do arquivo retornado. Para obter mais informações, consulte GetFileTitle e PathFindFileName no SDK do Windows.
Para retornar o caminho inteiro do arquivo, incluindo o nome, chame GetFilePath. Para retornar apenas o nome do arquivo, chame GetFileName.
Exemplo
Consulte o exemplo de GetFileName.
CFile::GetLength
Obtém o comprimento lógico atual do arquivo em bytes.
virtual ULONGLONG GetLength() const;
Valor de retorno
O comprimento do arquivo.
Exemplo
CFile* pFile = NULL;
// Constructing a CFile object with this override may throw
// a CFile exception, and won't throw any other exceptions.
// Calling CString::Format() may throw a CMemoryException,
// so we have a catch block for such exceptions, too. Any
// other exception types this function throws will be
// routed to the calling function.
try
{
pFile = new CFile(_T("C:\\WINDOWS\\SYSTEM.INI"),
CFile::modeRead | CFile::shareDenyNone);
ULONGLONG dwLength = pFile->GetLength();
CString str;
str.Format(_T("Your SYSTEM.INI file is %I64u bytes long."), dwLength);
AfxMessageBox(str);
}
catch (CFileException* pEx)
{
// Simply show an error message to the user.
pEx->ReportError();
pEx->Delete();
}
catch(CMemoryException* pEx)
{
pEx->ReportError();
pEx->Delete();
// We can't recover from this memory exception, so we'll
// just terminate the app without any cleanup. Normally,
// an application should do everything it possibly can to
// clean up properly and _not_ call AfxAbort().
AfxAbort();
}
// If an exception occurs in the CFile constructor,
// the language will free the memory allocated by new
// and will not complete the assignment to pFile.
// Thus, our clean-up code needs to test for NULL.
if (pFile != NULL)
{
pFile->Close();
delete pFile;
}
CFile::GetPosition
Obtém o valor atual do ponteiro de arquivo, que pode ser usado em chamadas posteriores para Seek.
virtual ULONGLONG GetPosition() const;
Valor de retorno
O ponteiro do arquivo.
Exemplo
CFile cfile;
cfile.Open(_T("Seek_File.dat"), CFile::modeCreate |
CFile::modeReadWrite);
LONGLONG lOffset = 1000;
ULONGLONG lActual;
lActual = cfile.Seek(lOffset, CFile::begin);
ASSERT(cfile.GetPosition() == lActual);
CFile::GetStatus
Esse método recupera informações de status relacionadas a uma determinada CFile instância de objeto ou um determinado caminho de arquivo.
BOOL GetStatus(CFileStatus& rStatus) const;
static BOOL PASCAL GetStatus(
LPCTSTR lpszFileName,
CFileStatus& rStatus,
CAtlTransactionManager* pTM = NULL);
Parâmetros
rStatus
Uma referência a uma estrutura fornecida CFileStatus pelo usuário que receberá as informações de status. A CFileStatus estrutura tem os seguintes campos:
CTime m_ctimeA data e a hora em que o arquivo foi criado.CTime m_mtimeA data e a hora em que o arquivo foi modificado pela última vez.CTime m_atimeA data e a hora em que o arquivo foi acessado pela última vez para leitura.ULONGLONG m_sizeO tamanho lógico do arquivo em bytes, conforme relatado pelo comando DIR.BYTE m_attributeO byte de atributo do arquivo.char m_szFullName[_MAX_PATH]O nome do arquivo absoluto no conjunto de caracteres do Windows.
lpszFileName
Uma cadeia de caracteres no conjunto de caracteres do Windows que é o caminho para o arquivo desejado. O caminho pode ser relativo ou absoluto, ou pode conter um nome de caminho de rede.
pTM
Ponteiro para o objeto CAtlTransactionManager
Valor de retorno
TRUE se as informações de status do arquivo especificado forem obtidas com êxito; caso contrário, FALSE.
Observações
A versão não estática do GetStatus recupera informações de status do arquivo aberto associado ao objeto fornecido CFile . A versão estática do GetStatus obtém o status do arquivo de um determinado caminho de arquivo sem realmente abrir o arquivo. Esta versão é útil para testar a existência e os direitos de acesso de um arquivo.
O m_attribute membro da estrutura refere-se ao conjunto de CFileStatus atributos de arquivo. A CFile classe fornece o tipo de enumeração Attribute para que os atributos de arquivo possam ser especificados simbolicamente:
enum Attribute {
normal = 0x00,
readOnly = 0x01,
hidden = 0x02,
system = 0x04,
volume = 0x08,
directory = 0x10,
archive = 0x20
};
Exemplo
CFile cfile;
cfile.Open(_T("SetLength_File.dat"), CFile::modeCreate |
CFile::modeReadWrite);
ULONGLONG dwNewLength = 10000;
cfile.SetLength(dwNewLength);
CFileStatus status;
if(cfile.GetStatus(status)) // virtual member function
{
TRACE(_T("File size = %u\n"), status.m_size);
}
TCHAR* pszFileName = _T("SetLength_File.dat");
if(CFile::GetStatus(pszFileName, status)) // static function
{
TRACE(_T("Full file name = %s\n"), status.m_szFullName);
}
CFile::hFileNull
Determina a presença de um identificador de arquivo válido para o CFile objeto.
static AFX_DATA const HANDLE hFileNull;
Observações
Essa constante é usada para determinar se o CFile objeto tem um identificador de arquivo válido.
O exemplo a seguir demonstra essa operação:
if (myFile.m_hFile != CFile::hFileNull)
;//perform operations on the file
else
;//indicate the presence of an invalid handle
CFile::LockRange
Bloqueia um intervalo de bytes em um arquivo aberto, lançando uma exceção se o arquivo já estiver bloqueado.
virtual void LockRange(
ULONGLONG dwPos,
ULONGLONG dwCount);
Parâmetros
dwPos
O deslocamento de bytes do início do intervalo de bytes a ser bloqueado.
dwContagem
O número de bytes no intervalo a bloquear.
Observações
Bloquear bytes em um arquivo impede o acesso a esses bytes por outros processos. Você pode bloquear mais de uma região de um arquivo, mas nenhuma região sobreposta é permitida.
Quando você desbloqueia a região usando a UnlockRange função de membro, o intervalo de bytes deve corresponder exatamente à região que foi bloqueada anteriormente. A LockRange função não mescla regiões adjacentes. Se duas regiões bloqueadas estiverem adjacentes, você deverá desbloquear cada região separadamente.
Observação
Esta função não está disponível para a CMemFileclasse -derivada.
Exemplo
CFile cfile;
cfile.Open(_T("LockRange_File.dat"), CFile::modeCreate |
CFile::modeReadWrite);
ULONGLONG dwPos = 10;
ULONGLONG dwCount = 100;
cfile.LockRange(dwPos, dwCount);
// do something with the file
cfile.UnlockRange(dwPos, dwCount);
CFile::m_hFile
Contém o identificador de arquivo do sistema operacional para um arquivo aberto.
HANDLE m_hFile;
Observações
m_hFile é uma variável pública do tipo UINT. Ele contém CFile::hFileNull, um indicador de arquivo vazio independente do sistema operacional, se o identificador não tiver sido atribuído.
O uso de m_hFile não é recomendado, porque o significado do membro depende da classe derivada.
m_hFile é tornado um membro público por conveniência no apoio ao uso não polimórfico da classe.
CFile::m_pTM
Ponteiro para um objeto CAtlTransactionManager.
CAtlTransactionManager* m_pTM;
Observações
CFile::Aberto
Sobrecarregado.
Open é projetado para uso com o construtor padrão CFile .
virtual BOOL Open(
LPCTSTR lpszFileName,
UINT nOpenFlags,
CFileException* pError = NULL);
virtual BOOL Open(
LPCTSTR lpszFileName,
UINT nOpenFlags,
CAtlTransactionManager* pTM,
CFileException* pError = NULL);
Parâmetros
lpszFileName
Uma cadeia de caracteres que contém o caminho para o arquivo desejado. O caminho pode ser relativo, absoluto ou um nome de rede (UNC).
nOpenFlags
Um UINT que define o modo de compartilhamento e acesso do arquivo. Ele especifica a ação a ser tomada ao abrir o arquivo. Você pode combinar opções usando o operador bitwise-OR ( | ). São necessárias uma permissão de acesso e uma opção de partilha; os modeCreate modos e modeNoInherit são opcionais. Consulte o construtor CFile para obter uma lista de opções de modo.
pErro
Um ponteiro para um objeto de exceção de arquivo existente que receberá o status de uma operação com falha.
pTM
Ponteiro para o objeto CAtlTransactionManager
Valor de retorno
Diferente de zero se a abertura foi bem-sucedida; caso contrário, 0. O parâmetro pError só será significativo se 0 for retornado.
Observações
As duas Open funções são métodos "seguros" para abrir um arquivo, onde uma falha é uma condição normal e esperada.
Enquanto o CFile construtor lança uma exceção em uma condição de erro, Open retorna FALSE para condições de erro.
Open ainda pode inicializar um objeto CFileException para descrever o erro, no entanto. Se você não fornecer o parâmetro pError , ou se passar NULL para pError, Open retornará FALSE e não lançará um CFileExceptionarquivo . Se você passar um ponteiro para um existente CFileExceptione Open encontrar um erro, a função o preencherá com informações descrevendo esse erro.
Open não lança uma exceção em ambos os casos.
A tabela a seguir descreve os possíveis resultados do Open.
pError |
Erro encontrado | Valor de retorno | Conteúdo CFileException |
|---|---|---|---|
| NULO | Não | VERDADEIRO | não aplicável |
ptr para CFileException |
Não | VERDADEIRO | inalterado |
| NULO | Sim | FALSO | não aplicável |
ptr para CFileException |
Sim | FALSO | inicializado para descrever o erro |
Exemplo
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;
}
CFile::operador HANDLE
Use este operador para passar um identificador para um CFile objeto para funções como ReadFileEx e GetFileTime que esperam um HANDLEarquivo .
operator HANDLE() const;
CFile::Ler
Lê dados em um buffer do arquivo associado ao CFile objeto.
virtual UINT Read(
void* lpBuf,
UINT nCount);
Parâmetros
lpBuf
Ponteiro para o buffer fornecido pelo usuário que deve receber os dados lidos do arquivo.
nContagem
O número máximo de bytes a serem lidos do arquivo. Para arquivos de modo texto, os pares de alimentação de linha de retorno de carro são contados como caracteres únicos.
Valor de retorno
O número de bytes transferidos para o buffer. Para todas as CFile classes, o valor de retorno pode ser menor que nCount se o final do arquivo foi atingido.
Exemplo
CFile cfile;
cfile.Open(_T("Write_File.dat"), CFile::modeCreate |
CFile::modeReadWrite);
char pbufWrite[100];
memset(pbufWrite, 'a', sizeof(pbufWrite));
cfile.Write(pbufWrite, 100);
cfile.Flush();
cfile.SeekToBegin();
char pbufRead[100];
cfile.Read(pbufRead, sizeof(pbufRead));
ASSERT(0 == memcmp(pbufWrite, pbufRead, sizeof(pbufWrite)));
Para outro exemplo, consulte CFile::Open.
CFile::Remover
Esta função estática exclui o arquivo especificado pelo caminho.
static void PASCAL Remove(
LPCTSTR lpszFileName,
CAtlTransactionManager* pTM = NULL);
Parâmetros
lpszFileName
Uma cadeia de caracteres que é o caminho para o arquivo desejado. O caminho pode ser relativo ou absoluto e pode conter um nome de rede.
pTM
Ponteiro para o objeto CAtlTransactionManager
Observações
Remove não removerá um diretório.
A Remove função de membro lança uma exceção se o arquivo conectado estiver aberto ou se o arquivo não puder ser removido. Esta função é equivalente ao comando DEL.
Exemplo
//example for CFile::Remove
TCHAR* pFileName = _T("Remove_File.dat");
try
{
CFile::Remove(pFileName);
}
catch (CFileException* pEx)
{
TRACE(_T("File %20s cannot be removed\n"), pFileName);
pEx->Delete();
}
CFile::Renomear
Esta função estática renomeia o arquivo especificado.
static void PASCAL Rename(
LPCTSTR lpszOldName,
LPCTSTR lpszNewName,
CAtlTransactionManager* pTM = NULL);
Parâmetros
lpszOldName
O caminho antigo.
lpszNewName
O novo caminho.
pTM
Ponteiro para o objeto CAtlTransactionManager
Observações
Os diretórios não podem ser renomeados. Esta função é equivalente ao comando da REN.
Exemplo
TCHAR* pOldName = _T("Oldname_File.dat");
TCHAR* pNewName = _T("Renamed_File.dat");
try
{
CFile::Rename(pOldName, pNewName);
}
catch(CFileException* pEx )
{
TRACE(_T("File %20s not found, cause = %d\n"), pOldName,
pEx->m_cause);
pEx->Delete();
}
CFile::Procurar
Reposiciona o ponteiro do arquivo em um arquivo aberto.
virtual ULONGLONG Seek(
LONGLONG lOff,
UINT nFrom);
Parâmetros
lOff
Número de bytes para mover o ponteiro do arquivo. Valores positivos movem o ponteiro do arquivo para o final do arquivo; Os valores negativos movem o ponteiro do arquivo para o início do arquivo.
nDe
Posição a procurar. Consulte a seção Comentários para obter os valores possíveis.
Valor de retorno
A posição do ponteiro do arquivo se o método foi bem-sucedido; caso contrário, o valor de retorno será indefinido e um ponteiro para uma CFileException exceção será lançado.
Observações
A tabela a seguir lista os valores possíveis para o parâmetro nFrom .
| Valor | Descrição |
|---|---|
CFile::begin |
Procure desde o início do arquivo. |
CFile::current |
Procure a partir do local atual do ponteiro do arquivo. |
CFile::end |
Procure a partir do final do arquivo. |
Quando um arquivo é aberto, o ponteiro do arquivo é posicionado em 0, o início do arquivo.
Você pode definir o ponteiro do arquivo para uma posição além do final de um arquivo. Se você fizer isso, o tamanho do arquivo não aumentará até que você grave no arquivo.
O manipulador de exceção para esse método deve excluir o objeto de exceção depois que a exceção é processada.
Exemplo
CFile cfile;
cfile.Open(_T("Seek_File.dat"), CFile::modeCreate |
CFile::modeReadWrite);
LONGLONG lOffset = 1000;
ULONGLONG lActual;
lActual = cfile.Seek(lOffset, CFile::begin);
CFile::SeekToBegin
Define o valor do ponteiro do arquivo para o início do arquivo.
void SeekToBegin();
Observações
SeekToBegin() é equivalente a Seek( 0L, CFile::begin ).
Exemplo
CFile f;
f.Open(_T("Seeker_File.dat"), CFile::modeCreate |
CFile::modeReadWrite);
f.SeekToBegin();
ULONGLONG ullEnd = f.SeekToEnd();
CFile::SeekToEnd
Define o valor do ponteiro do arquivo para a extremidade lógica do arquivo.
ULONGLONG SeekToEnd();
Valor de retorno
O comprimento do arquivo em bytes.
Observações
SeekToEnd() é equivalente a CFile::Seek( 0L, CFile::end ).
Exemplo
CFile f;
f.Open(_T("Seeker_File.dat"), CFile::modeCreate |
CFile::modeReadWrite);
f.SeekToBegin();
ULONGLONG ullEnd = f.SeekToEnd();
CFile::SetFilePath
Chame essa função para especificar o caminho do arquivo. Por exemplo, se o caminho de um arquivo não estiver disponível quando um objeto CFile for construído, chame SetFilePath para fornecê-lo.
virtual void SetFilePath(LPCTSTR lpszNewName);
Parâmetros
lpszNewName
Ponteiro para uma cadeia de caracteres especificando o novo caminho.
Observações
Observação
SetFilePath não abre o ficheiro nem cria o ficheiro; ele simplesmente associa o CFile objeto a um nome de caminho, que pode ser usado.
Exemplo
TCHAR* pstrName = _T("C:\\test\\SetPath_File.dat");
// open a file
HANDLE hFile = ::CreateFile(pstrName, GENERIC_WRITE, FILE_SHARE_READ,
NULL, CREATE_ALWAYS, 0, NULL);
if (hFile != INVALID_HANDLE_VALUE)
{
// attach a CFile object to it
CFile myFile(hFile);
// At this point, myFile doesn't know the path name for the file
// it owns because Windows doesn't associate that information
// with the handle. Any CFileExceptions thrown by this object
// won't have complete information.
// Calling SetFilePath() remedies that problem by letting CFile
// know the name of the file that's associated with the object.
myFile.SetFilePath(pstrName);
// write something to the file and flush it immediately
DWORD dwValue = 1234;
myFile.Write(&dwValue, sizeof(dwValue));
myFile.Flush();
// destroying the CObject here will call ::CloseHandle() on the file
}
CFile::SetLength
Chame essa função para alterar o comprimento do arquivo.
virtual void SetLength(ULONGLONG dwNewLen);
Parâmetros
dwNewLen
Comprimento desejado do arquivo em bytes. Esse valor pode ser maior ou menor do que o comprimento atual do arquivo. O arquivo será estendido ou truncado conforme apropriado.
Observações
Observação
Com CMemFileo , essa função pode lançar um CMemoryException objeto.
Exemplo
CFile cfile;
cfile.Open(_T("SetLength_File.dat"), CFile::modeCreate |
CFile::modeReadWrite);
ULONGLONG dwNewLength = 10000;
cfile.SetLength(dwNewLength);
CFile::SetStatus
Define o status do arquivo associado a esse local de arquivo.
static void PASCAL SetStatus(
LPCTSTR lpszFileName,
const CFileStatus& status,
CAtlTransactionManager* pTM = NULL);
Parâmetros
lpszFileName
Uma cadeia de caracteres que é o caminho para o arquivo desejado. O caminho pode ser relativo ou absoluto e pode conter um nome de rede.
Situação
O buffer que contém as novas informações de status. Chame a GetStatus função de membro para pré-preencher a CFileStatus estrutura com valores atuais e, em seguida, faça alterações conforme necessário. Se um valor for 0, o item de status correspondente não será atualizado. Consulte a função de membro GetStatus para obter uma descrição da CFileStatus estrutura.
pTM
Ponteiro para o objeto CAtlTransactionManager
Observações
Para definir a hora, modifique o m_mtime campo de status.
Quando você faz uma chamada para SetStatus em uma tentativa de alterar apenas os atributos do arquivo e o m_mtime membro da estrutura de status do arquivo é diferente de zero, os atributos também podem ser afetados (alterar o carimbo de data/hora pode ter efeitos colaterais sobre os atributos). Se você quiser alterar apenas os atributos do arquivo, primeiro defina o m_mtime membro da estrutura de status do arquivo como zero e, em seguida, faça uma chamada para SetStatus.
Exemplo
TCHAR* pFileName = _T("ReadOnly_File.dat");
CFileStatus status;
CFile::GetStatus(pFileName, status);
status.m_attribute |= CFile::readOnly;
CFile::SetStatus(pFileName, status);
CFile::UnlockRange
Desbloqueia um intervalo de bytes em um arquivo aberto.
virtual void UnlockRange(
ULONGLONG dwPos,
ULONGLONG dwCount);
Parâmetros
dwPos
O deslocamento de bytes do início do intervalo de bytes a ser desbloqueado.
dwContagem
O número de bytes no intervalo a ser desbloqueado.
Observações
Consulte a descrição da função de membro LockRange para obter detalhes.
Observação
Esta função não está disponível para a CMemFileclasse -derivada.
Exemplo
CFile cfile;
cfile.Open(_T("LockRange_File.dat"), CFile::modeCreate |
CFile::modeReadWrite);
ULONGLONG dwPos = 10;
ULONGLONG dwCount = 100;
cfile.LockRange(dwPos, dwCount);
// do something with the file
cfile.UnlockRange(dwPos, dwCount);
CFile::Escrever
Grava dados de um buffer no arquivo associado ao CFile objeto.
virtual void Write(
const void* lpBuf,
UINT nCount);
Parâmetros
lpBuf
Um ponteiro para o buffer fornecido pelo usuário que contém os dados a serem gravados no arquivo.
nContagem
O número de bytes a serem transferidos do buffer. Para arquivos de modo texto, os pares de alimentação de linha de retorno de carro são contados como caracteres únicos.
Observações
Write lança uma exceção em resposta a várias condições, incluindo a condição de disco cheio.
Exemplo
CFile cfile;
cfile.Open(_T("Write_File.dat"), CFile::modeCreate |
CFile::modeReadWrite);
char pbufWrite[100];
memset(pbufWrite, 'a', sizeof(pbufWrite));
cfile.Write(pbufWrite, 100);
cfile.Flush();
Veja também os exemplos de CFile::CFile e CFile::Open.
Ver também
MFC Exemplo DRAWCLI
CObject Classe
Gráfico de Hierarquia
CStdioFile Classe
CMemFile Classe