Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Classe
Observação
A biblioteca Microsoft Foundation Classes (MFC) continua sendo suportada. No entanto, não estamos mais adicionando recursos ou atualizando a documentação.
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 CFile, Duplicate e LockRange de UnlockRange 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 arquivolOffbytes para a frente desde o início do arquivo.CFile::current: mova ponteiro de arquivolOffbytes desde a posição atual no arquivo.CFile::end: mova ponteiro de arquivolOffbytes desde o final do arquivo. Observe quelOffprecisa 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 fseeke _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