Partilhar via


Classe CFile

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

CObject

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_ctime A data e a hora em que o arquivo foi criado.

  • CTime m_mtime A data e a hora em que o arquivo foi modificado pela última vez.

  • CTime m_atime A data e a hora em que o arquivo foi acessado pela última vez para leitura.

  • ULONGLONG m_size O tamanho lógico do arquivo em bytes, conforme relatado pelo comando DIR.

  • BYTE m_attribute O 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