Partilhar via


CStdioFile Classe

Representa um arquivo de fluxo de tempo de execução C conforme aberto pela função fopende tempo de execução.

Sintaxe

class CStdioFile : public CFile

Membros

Construtores Públicos

Nome Descrição
CStdioFile::CStdioFile Constrói um CStdioFile objeto a partir de um caminho ou ponteiro de arquivo.

Métodos Públicos

Nome Descrição
CStdioFile::Open Sobrecarregado. Open é projetado para uso com o construtor padrão CStdioFile (Overrides CFile::Open).
CStdioFile::ReadString Lê uma única linha de texto.
CStdioFile::Seek Posiciona o ponteiro do arquivo atual.
CStdioFile::WriteString Escreve uma única linha de texto.

Membros de Dados Públicos

Nome Descrição
CStdioFile::m_pStream Contém um ponteiro para um arquivo aberto.

Observações

Os arquivos de fluxo são armazenados em buffer e podem ser abertos no modo de texto (o padrão) ou no modo binário.

O modo de texto fornece processamento especial para pares de alimentação de linha de retorno de carro. Quando você escreve um caractere de alimentação de linha (nova linha) (0x0A) em um objeto de modo CStdioFile de texto, o par de bytes (0x0D, 0x0A) é enviado para o arquivo. Quando você lê, o par de bytes (0x0D, 0x0A) é traduzido para um único byte de 0x0A.

As CFile funções Duplicate, LockRangee UnlockRange não são suportadas para CStdioFile.

Se você chamar essas funções em um CStdioFile, você receberá um CNotSupportedExceptionarquivo .

Para obter mais informações sobre como usar CStdioFileo , consulte os artigos Arquivos no MFC e Tratamento de arquivos na Referência da bibliotecaRun-Time.

Hierarquia de herança

CObject

CFile

CStdioFile

Requerimentos

Cabeçalho:afx.h

CStdioFile::CStdioFile

Constrói e inicializa um objeto CStdioFile.

CStdioFile();
CStdioFile(CAtlTransactionManager* pTM);
CStdioFile(FILE* pOpenStream);

CStdioFile(
    LPCTSTR lpszFileName,
    UINT nOpenFlags);

CStdioFile(
    LPCTSTR lpszFileName,
    UINT nOpenFlags,
    CAtlTransactionManager* pTM);

Parâmetros

pOpenStream
Especifica o ponteiro de arquivo retornado por uma chamada para a função fopende tempo de execução C.

lpszFileName
Especifica uma cadeia de caracteres que é o caminho para o arquivo desejado. O caminho pode ser relativo ou absoluto.

nOpenFlags
Especifica opções para os modos de criação de arquivos, compartilhamento de arquivos e acesso a arquivos. Você pode especificar várias opções usando o operador bit a bit OR ( | ).

É necessária uma opção de modo de acesso a ficheiros; outros modos são opcionais. Consulte CFile::CFile para obter uma lista de opções de modo e outros sinalizadores. No MFC versão 3.0 e posterior, sinalizadores de compartilhamento são permitidos.

pTM
Ponteiro para objeto CAtlTransactionManager .

Observações

O construtor padrão não anexa um arquivo ao CStdioFile objeto. Ao usar esse construtor, você deve usar o CStdioFile::Open método para abrir um arquivo e anexá-lo ao CStdioFile objeto.

O construtor de parâmetro único anexa um fluxo de arquivo aberto ao CStdioFile objeto. Os valores de ponteiro permitidos incluem os ponteiros stdinde arquivo de entrada/saída predefinidos , stdoutou stderr.

O construtor de dois parâmetros cria um CStdioFile objeto e abre o arquivo correspondente com o caminho fornecido.

Se você passar NULL por um pOpenStream ou lpszFileName, o construtor lança um CInvalidArgException*arquivo .

Se o arquivo não puder ser aberto ou criado, o construtor lançará um CFileException*arquivo .

Exemplo

TCHAR* pFileName = _T("CStdio_File.dat");
CStdioFile f1;
if(!f1.Open(pFileName, CFile::modeCreate | CFile::modeWrite 
   | CFile::typeText)) 
{
   TRACE(_T("Unable to open file\n"));
}

CStdioFile f2(stdout);
try
{
   CStdioFile f3( pFileName,
      CFile::modeCreate | CFile::modeWrite | CFile::typeText );
}
catch(CFileException* pe)
{
   TRACE(_T("File could not be opened, cause = %d\n"),
      pe->m_cause);
   pe->Delete();
}

CStdioFile::m_pStream

O m_pStream membro de dados é o ponteiro para um arquivo aberto conforme retornado pela função fopende tempo de execução C.

FILE* m_pStream;

Observações

NULL É se o arquivo nunca foi aberto ou foi fechado.

CStdioFile::Open

Sobrecarregado. Open é projetado para uso com o construtor padrão CStdioFile .

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 é o caminho para o arquivo desejado. O caminho pode ser relativo ou absoluto.

nOpenFlags
Modo de partilha e acesso. Especifica a ação a ser executada 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 modos modeCreate e modeNoInherit são opcionais.

pError
Um ponteiro para um objeto de exceção de arquivo existente que receberá o status de uma operação com falha.

pTM
Ponteiro para um objeto CAtlTransactionManager.

Valor de retorno

TRUE se for bem-sucedida; caso contrário, FALSE.

Observações

CStdioFile::ReadString

Lê dados de texto em um buffer, até um limite de nMax-1 caracteres, do arquivo associado ao CStdioFile objeto.

virtual LPTSTR ReadString(
    LPTSTR lpsz,
    UINT nMax);

virtual BOOL ReadString(CString& rString);

Parâmetros

lpsz
Especifica um ponteiro para um buffer fornecido pelo usuário que receberá uma cadeia de texto terminada em nulo.

nMax
Especifica o número máximo de caracteres para gravar no lpsz buffer, incluindo o nulo de terminação.

rString
Uma referência a um CString objeto que conterá a cadeia de caracteres quando a função retornar.

Valor de retorno

Um ponteiro para o buffer que contém os dados de texto. NULL se o fim do ficheiro foi atingido sem a leitura de quaisquer dados; ou se booleano, FALSE se o fim do arquivo foi alcançado sem ler nenhum dado.

Observações

A leitura é interrompida pelo primeiro caractere de nova linha. Se, nesse caso, menos de nMax-1 caracteres tiverem sido lidos, um caractere de nova linha será armazenado no buffer. Um caractere nulo ('\0') é acrescentado em ambos os casos.

CFile::Read também está disponível para entrada no modo texto, mas não termina em um par de alimentação de linha de retorno de carro.

Observação

A CString versão desta função remove o '\n' se presente, a LPTSTR versão não.

Exemplo

CStdioFile f(stdin);
TCHAR buf[100];

f.ReadString(buf, 99);

CStdioFile::Seek

Reposiciona o ponteiro em um arquivo aberto anteriormente.

virtual ULONGLONG Seek(
    LONGLONG lOff,
    UINT nFrom);

Parâmetros

lOff
Número de bytes para mover o ponteiro.

nFrom
Modo de movimento do ponteiro. Deve ser um dos seguintes valores:

  • CFile::begin: Mova os bytes do ponteiro lOff do arquivo para frente desde o início do arquivo.

  • CFile::current: Mova os bytes do ponteiro lOff do arquivo da posição atual no arquivo.

  • CFile::end: Mova os bytes de ponteiro lOff do arquivo do final do arquivo. Observe que lOff deve ser negativo para buscar no arquivo existente, valores positivos buscarão após o final do arquivo.

Valor de retorno

Se a posição solicitada for legal, Seek retorna o novo deslocamento de byte do início do arquivo. Caso contrário, o valor de retorno será indefinido e um CFileException objeto será lançado.

Observações

A Seek função permite o acesso aleatório ao conteúdo de um arquivo, movendo o ponteiro uma quantidade especificada, absoluta ou relativamente. Nenhum dado é realmente lido durante a busca. Se a posição solicitada for maior do que o tamanho do arquivo, o comprimento do arquivo será estendido para essa posição e nenhuma exceção será lançada.

Quando um arquivo é aberto, o ponteiro do arquivo é posicionado no deslocamento 0, o início do arquivo.

Esta implementação do Seek é baseada na função fseekRun-Time Library (CRT). Existem vários limites para o uso de Seek em fluxos abertos no modo de texto. Para obter mais informações, consulte fseek, _fseeki64.

Exemplo

O exemplo a seguir mostra como usar Seek para mover o ponteiro 1000 bytes do início do cfile arquivo. Observe que Seek não lê dados, portanto, você deve ligar posteriormente CStdioFile::ReadString para ler dados.

CStdioFile cfile(_T("Stdio_Seek_File.dat"), CFile::modeWrite |
   CFile::modeCreate);
LONGLONG lOff = 1000;
ULONGLONG lActual = cfile.Seek(lOff, CFile::begin);

CStdioFile::WriteString

Grava dados de um buffer no arquivo associado ao CStdioFile objeto.

virtual void WriteString(LPCTSTR lpsz);

Parâmetros

lpsz
Especifica um ponteiro para um buffer que contém uma cadeia de caracteres terminada em nulo.

Observações

O caractere nulo de terminação (\0) não é gravado no arquivo. Esse método grava caracteres de nova linha no lpsz arquivo como um par de alimentação de linha de retorno de carro.

Se você quiser gravar dados que não são terminados nulos em um arquivo, use CStdioFile::Write ou CFile::Write.

Esse método lança um CInvalidArgException* se você especificar NULL para o lpsz parâmetro.

Este método lança um CFileException* em resposta a erros do sistema de arquivos.

Exemplo

CStdioFile f(stdout);
TCHAR buf[] = _T("test string");

f.WriteString(buf);

Ver também

CFile Classe
Gráfico de Hierarquia
CFile Classe
CFile::Duplicate
CFile::LockRange
CFile::UnlockRange
CNotSupportedException Classe