Classe CStdioFile
Representa um arquivo de fluxo em tempo de execução C, conforme aberto pela função de tempo de execução fopen
.
Sintaxe
class CStdioFile : public CFile
Membros
Construtores públicos
Nome | Descrição |
---|---|
CStdioFile::CStdioFile |
Cria um objeto CStdioFile a partir de um ponteiro de caminho ou de arquivo. |
Métodos públicos
Nome | Descrição |
---|---|
CStdioFile::Open |
Sobrecarregado. Open foi projetado para ser usado com o construtor padrão CStdioFile (substitui CFile::Open ). |
CStdioFile::ReadString |
Lê apenas uma linha de texto. |
CStdioFile::Seek |
Posiciona o ponteiro do arquivo atual. |
CStdioFile::WriteString |
Grava uma só linha de texto. |
Membros de Dados Públicos
Nome | Descrição |
---|---|
CStdioFile::m_pStream |
Contém um ponteiro para um arquivo aberto. |
Comentários
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 retorno de carro/feed de linha. Quando você escreve um caractere (0x0A) de feed de linha (nova linha) em um objeto CStdioFile
de modo de texto, o par de bytes (0x0D, 0x0A) é enviado para o arquivo. Quando você lê, o par de bytes (0x0D, 0x0A) é convertido em apenas um byte 0x0A.
As funções Duplicate
, LockRange
e UnlockRange
de CFile
não são compatíveis com CStdioFile
.
Se você chamar essas funções em um CStdioFile
, você obterá um CNotSupportedException
.
Para obter mais informações sobre como usar a CStdioFile
, confira os artigos Arquivos em MFC e Tratamento de arquivos na Referência de biblioteca de runtime.
Hierarquia de herança
CStdioFile
Requisitos
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 à função fopen
de 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 criação de arquivo, compartilhamento de arquivos e modos de acesso a arquivos. Você pode especificar várias opções usando o operador OR (|
) bit a bit.
Uma opção de modo de acesso de arquivo é exigida; outros modos são opcionais. Confira CFile::CFile
para uma lista de opções de modo e outros sinalizadores. No MFC versão 3.0 e posterior, os sinalizadores de compartilhamento são permitidos.
pTM
Ponteiro para o objeto CAtlTransactionManager
.
Comentários
O construtor padrão não anexa um arquivo ao objeto CStdioFile
. Ao usar esse construtor, use o método CStdioFile::Open
para abrir um arquivo e anexá-lo ao objeto CStdioFile
.
O construtor de parâmetro único anexa um fluxo de arquivo aberto ao objeto CStdioFile
. Os valores de ponteiro permitidos incluem os ponteiros de arquivo de entrada/saída predefinidos stdin
. stdout
ou stderr
.
O construtor de dois parâmetros cria um objeto CStdioFile
e abre o arquivo correspondente com o caminho fornecido.
Se você passar NULL
para um pOpenStream
ou lpszFileName
, o construtor gerará uma CInvalidArgException*
.
Se o arquivo não puder ser aberto ou criado, o construtor gerará um CFileException*
.
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 membro de dados m_pStream
é o ponteiro para um arquivo aberto, conforme retornado pela função fopen
de tempo de execução C.
FILE* m_pStream;
Comentários
É NULL
se o arquivo nunca foi aberto ou se foi fechado.
CStdioFile::Open
Sobrecarregado. Open foi projetado para ser usado 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
Compartilhamento e modo de acesso. Ele especifica a ação a ser executada ao abrir o arquivo. Você pode combinar opções usando o operador OR (|
) bit a bit. Uma permissão de acesso e uma opção de compartilhamento são necessárias; 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-sucedido, caso contrário, FALSE
.
Comentários
CStdioFile::ReadString
Lê dados de texto em um buffer, até um limite de nMax
-1 caracteres, do arquivo associado ao objeto CStdioFile
.
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 caracteres de texto terminada em nulo.
nMax
Especifica o número máximo de caracteres a serem gravados no lpsz
buffer, incluindo o nulo de terminação.
rString
Uma referência a um objeto CString
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 arquivo foi atingido sem ler dados; ou, se booliano, FALSE
se o fim do arquivo foi atingido sem ler nenhum dado.
Comentários
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'
) será acrescentado em ambos os casos.
CFile::Read
também está disponível para entrada no modo de texto, mas não termina em um par de retorno de carro/feed de linha.
Observação
A versão CString
dessa função remove o '\n'
se presente; a versão LPTSTR
não o faz.
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 ponteiro de arquivolOff
bytes para a frente desde o início do arquivo.CFile::current
: mova ponteiro de arquivolOff
bytes desde a posição atual no arquivo.CFile::end
: mova ponteiro de arquivolOff
bytes desde o final do arquivo. Observe quelOff
precisa ser negativo para buscar no arquivo existente; os valores positivos buscarão além do final do arquivo.
Valor de retorno
Se a posição solicitada for válida, Seek
retornará o novo deslocamento de bytes desde o início do arquivo. Caso contrário, o valor retornado será indefinido e um objeto CFileException
será gerado.
Comentários
A função Seek
permite acesso aleatório ao conteúdo de um arquivo movendo o ponteiro em uma quantidade especificada, absolutamente ou relativamente. Nenhum dado é realmente lido durante a busca. Se a posição solicitada for maior que o tamanho do arquivo, o comprimento do arquivo será estendido para essa posição e nenhuma exceção será gerada.
Quando um arquivo é aberto, o ponteiro do arquivo é posicionado no deslocamento 0 desde o início do arquivo.
Essa implementação de Seek
é baseada na função fseek
da biblioteca de runtime (CRT). Há vários limites para o uso de Seek
em fluxos abertos no modo de texto. Para obter mais informações, consulte fseek
e _fseeki64
.
Exemplo
O exemplo a seguir mostra como usar Seek
para mover o ponteiro 1000 bytes desde o início do arquivo cfile
. Observe que Seek
não lê dados, portanto, você precisa chamar CStdioFile::ReadString
posteriormente 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 objeto CStdioFile
.
virtual void WriteString(LPCTSTR lpsz);
Parâmetros
lpsz
Especifica um ponteiro para um buffer que contém uma cadeia de caracteres terminada em nulo.
Comentários
O caractere nulo de terminação (\0
) não é gravado no arquivo. Esse método grava caracteres de nova linha no arquivo lpsz
como um par de retorno de carro/feed de linha.
Se você quiser gravar dados que não sejam encerrados em nulo em um arquivo, use CStdioFile::Write
ou CFile::Write
.
Esse método gerará uma CInvalidArgException*
se você especificar NULL
para o parâmetro lpsz
.
Esse método gerará uma CFileException*
em resposta a erros do sistema de arquivos.
Exemplo
CStdioFile f(stdout);
TCHAR buf[] = _T("test string");
f.WriteString(buf);
Confira também
Classe CFile
Gráfico da hierarquia
Classe CFile
CFile::Duplicate
CFile::LockRange
CFile::UnlockRange
Classe CNotSupportedException