Classe CInternetFile
Permite o acesso a arquivos em sistemas remotos que usam protocolos de Internet.
Sintaxe
class CInternetFile : public CStdioFile
Membros
Construtores Protegidos
Nome | Descrição |
---|---|
CInternetFile::CInternetFile | Constrói um objeto CInternetFile . |
Métodos públicos
Nome | Descrição |
---|---|
CInternetFile::Abort | Fecha o arquivo, ignorando todos os avisos e erros. |
CInternetFile::Close | Fecha um CInternetFile e libera seus recursos. |
CInternetFile::Flush | Libera o conteúdo do buffer de gravação e garante que os dados na memória sejam gravados no computador de destino. |
CInternetFile::GetLength | Retorna o tamanho do arquivo. |
CInternetFile::Read | Lê o número de bytes especificados. |
CInternetFile::ReadString | Lê um fluxo de caracteres. |
CInternetFile::Seek | Reposiciona o ponteiro em um arquivo aberto. |
CInternetFile::SetReadBufferSize | Define o tamanho do buffer em que os dados serão lidos. |
CInternetFile::SetWriteBufferSize | Define o tamanho do buffer em que os dados serão gravados. |
CInternetFile::Write | Grava o número de bytes especificados. |
CInternetFile::WriteString | Grava uma cadeia de caracteres terminada em nulo em um arquivo. |
Operadores públicos
Nome | Descrição |
---|---|
CInternetFile::operator HINTERNET | Um operador de conversão para um identificador da Internet. |
Membros de dados protegidos
Nome | Descrição |
---|---|
CInternetFile::m_hFile | Um identificador para um arquivo. |
Comentários
Fornece uma classe base para as classes de arquivo CHttpFile e CGopherFile. Você nunca cria um objeto CInternetFile
diretamente. Em vez disso, crie um objeto de uma das classes derivadas, chamando CGopherConnection::OpenFile ou CHttpConnection::OpenRequest. Você também pode criar um objeto CInternetFile
, chamando CFtpConnection::OpenFile.
As funções de membro CInternetFile
, Open
, LockRange
, UnlockRange
e Duplicate
não são implementadas para CInternetFile
. Se você chamar essas funções em um objeto CInternetFile
, obterá um CNotSupportedException.
Para saber mais sobre como CInternetFile
funciona com as outras classes de Internet do MFC, confira o artigo Programação na Internet com o WinInet.
Hierarquia de herança
CInternetFile
Requisitos
Cabeçalho: afxinet.h
CInternetFile::Abort
Fecha o arquivo associado a esse objeto e torna o arquivo protegido contra leitura ou gravação.
virtual void Abort();
Comentários
Caso ainda não tenha fechado o arquivo antes de destruir o objeto, o destruidor o fechará para você.
Ao tratar exceções, Abort
difere de Close de duas formas importantes. Primeiro, a função Abort
não gera uma exceção nas falhas porque as ignora. Segundo, Abort
não executará ASSERT, se o arquivo não tiver sido aberto ou se tiver sido fechado anteriormente.
CInternetFile::CInternetFile
Essa função membro é chamada quando um objeto CInternetFile
é criado.
CInternetFile(
HINTERNET hFile,
LPCTSTR pstrFileName,
CInternetConnection* pConnection,
BOOL bReadMode);
CInternetFile(
HINTERNET hFile,
HINTERNET hSession,
LPCTSTR pstrFileName,
LPCTSTR pstrServer,
DWORD_PTR dwContext,
BOOL bReadMode);
Parâmetros
hFile
Um identificador para um arquivo da Internet.
pstrFileName
Um ponteiro para uma cadeia de caracteres que contém o nome do arquivo.
pConnection
Um ponteiro para um objeto CInternetConnection.
bReadMode
Indica se o arquivo é somente leitura.
hSession
Um identificador para uma sessão da Internet.
pstrServer
Um ponteiro para uma cadeia de caracteres contendo o nome do servidor.
dwContext
O identificador de contexto do objeto CInternetFile
. Confira Noções Básicas sobre WinInet, para obter mais informações sobre o identificador de contexto.
Comentários
Você nunca cria um objeto CInternetFile
diretamente. Em vez disso, crie um objeto de uma das classes derivadas, chamando CGopherConnection::OpenFile ou CHttpConnection::OpenRequest. Você também pode criar um objeto CInternetFile
, chamando CFtpConnection::OpenFile.
CInternetFile::Close
Fecha um CInternetFile
e libera qualquer um de seus recursos.
virtual void Close();
Comentários
Se o arquivo foi aberto para gravação, há uma chamada implícita para Flush para garantir que todos os dados em buffer sejam gravados no host. Você deve chamar Close
, quando terminar de usar um arquivo.
CInternetFile::Flush
Chame essa função de membro para liberar o conteúdo do buffer de gravação.
virtual void Flush();
Comentários
Use Flush
para garantir que todos os dados na memória foram realmente gravados no computador de destino e para garantir que a transação com o computador host tenha sido concluída. Flush
só é eficaz nos objetos CInternetFile
abertos para gravação.
CInternetFile::GetLength
Retorna o tamanho do arquivo.
virtual ULONGLONG GetLength() const;
CInternetFile::m_hFile
Um identificador para o arquivo associado a esse objeto.
HINTERNET m_hFile;
CInternetFile::operator HINTERNET
Use este operador para obter o identificador do Windows para a sessão da Internet atual.
operator HINTERNET() const;
CInternetFile::Read
Chame essa função de membro para ler na memória fornecida, começando em lpvBuf, o número especificado de bytes, nCount.
virtual UINT Read(
void* lpBuf,
UINT nCount);
Parâmetros
lpBuf
Um ponteiro para um endereço de memória em que os dados de arquivo são lidos.
nCount
O número de bytes a serem gravados.
Valor de retorno
O número de bytes transferidos ao buffer. O valor retornado pode ser menor que nCount, se você chegou ao final do arquivo.
Comentários
A função retorna o número de bytes realmente lidos – um número que pode ser menor que nCount, se o arquivo terminar. Se ocorrer um erro ao ler o arquivo, a função gerará um objeto CInternetException que descreve o erro. Observe que a leitura após o final do arquivo não é considerada um erro e nenhuma exceção será gerada.
Para garantir que todos os dados sejam recuperados, um aplicativo deve continuar a chamar o método CInternetFile::Read
até que o método retorne zero.
CInternetFile::ReadString
Chame essa função de membro para ler um fluxo de caracteres até encontrar um caractere de nova linha.
virtual BOOL ReadString(CString& rString);
virtual LPTSTR ReadString(
LPTSTR pstr,
UINT nMax);
Parâmetros
pstr
Um ponteiro para uma cadeia de caracteres que receberá a linha que está sendo lida.
nMax
O número máximo de caracteres a serem lidos.
rString
Uma referência ao objeto CString que recebe a linha de leitura.
Valor de retorno
Um ponteiro para o buffer que contém os dados sem formatação recuperados do objeto CInternetFile. Independentemente do tipo de dados do buffer passado para esse método, ele não executa nenhuma manipulação nos dados (por exemplo, conversão para Unicode), portanto, você deve mapear os dados retornados para a estrutura esperada, como se o void
* tipo fosse retornado.
NULL, se você chegou ao fim do arquivo sem ler os dados. Ou, se booliano, FALSE, se você chegou ao fim do arquivo sem ler os dados.
Comentários
A função coloca a linha resultante na memória referenciada pelo parâmetro pstr. Ela interrompe a leitura de caracteres quando atinge o número máximo de caracteres, especificado por nMax. O buffer sempre recebe um caractere nulo de término.
Se você chamar ReadString
sem chamar SetReadBufferSize pela primeira vez, receberá um buffer de 4096 bytes.
CInternetFile::Seek
Chame essa função de membro para reposicionar o ponteiro em um arquivo aberto anteriormente.
virtual ULONGLONG Seek(
LONGLONG lOffset,
UINT nFrom);
Parâmetros
lOffset
Deslocamento em bytes para mover o ponteiro de leitura/gravação no arquivo.
nFrom
Referência relativa para o deslocamento. Deve ser um dos seguintes valores:
CFile::begin
Mova o ponteiro de arquivo lOff bytes para a frente desde o início do arquivo.CFile::current
Mova o ponteiro de arquivo lOff bytes desde a posição atual no arquivo.CFile::end
Mova o ponteiro de arquivo lOff bytes desde o final do arquivo. lOff deve ser negativo para buscar no arquivo existente. Os valores positivos buscarão além do final do arquivo.
Valor de retorno
O novo deslocamento de bytes do início do arquivo, se a posição solicitada for legal. Caso contrário, o valor é indefinido e um objeto CInternetException é 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.
No momento, há suporte para uma chamada para essa função de membro somente para dados associados a objetos CHttpFile
. Não há suporte para solicitações FTP ou gopher. Se você chamar Seek
para um desses serviços sem suporte, você receberá novamente o código de erro do Win32 ERROR_INTERNET_INVALID_OPERATION.
Quando um arquivo é aberto, o ponteiro do arquivo está no deslocamento 0, desde o início do arquivo.
Observação
O uso de Seek
pode fazer com que uma chamada implícita seja liberada.
Exemplo
Confira o exemplo para a implementação da classe base (CFile::Seek).
CInternetFile::SetReadBufferSize
Chame essa função de membro para definir o tamanho do buffer de leitura temporário usado por um objeto derivado de CInternetFile
.
BOOL SetReadBufferSize(UINT nReadSize);
Parâmetros
nReadSize
O tamanho do buffer desejado em bytes.
Valor de retorno
Diferente de zero se tiver êxito; caso contrário, 0. Se a chamada falhar, a função Win32 GetLastError poderá ser chamada para determinar a causa do erro.
Comentários
As APIs WinInet subjacentes não executam o buffer. Portanto, escolha um tamanho de buffer que permita que o aplicativo leia os dados com eficiência, independentemente do volume de dados a serem lidos. Se cada chamada para Read normalmente envolve um grande volume de dados (por exemplo, quatro ou mais quilobytes), você não deve precisar de um buffer. No entanto, se você chamar Read
para obter pequenas partes de dados ou se usar ReadString para ler linhas individuais de cada vez, um buffer de leitura melhorará o desempenho do aplicativo.
Por padrão, um objeto CInternetFile
não fornece buffer para leitura. Se você chamar essa função de membro, deve ter certeza de que o arquivo foi aberto para acesso de leitura.
Você pode aumentar o tamanho do buffer a qualquer momento, mas a redução do buffer não entrará em vigor. Se você chamar ReadString sem chamar SetReadBufferSize
primeiro, receberá um buffer de 4096 bytes.
CInternetFile::SetWriteBufferSize
Chame essa função de membro para definir o tamanho do buffer de gravação temporário usado por um objeto derivado de CInternetFile
.
BOOL SetWriteBufferSize(UINT nWriteSize);
Parâmetros
nWriteSize
O tamanho do buffer em bytes.
Valor de retorno
Diferente de zero se tiver êxito; caso contrário, 0. Se a chamada falhar, a função Win32 GetLastError poderá ser chamada para determinar a causa do erro.
Comentários
As APIs WinInet subjacentes não executam o buffer. Portanto, escolha um tamanho de buffer que permita que o aplicativo grave os dados com eficiência, independentemente do volume de dados a serem gravados. Se cada chamada para Write normalmente envolve um grande volume de dados (por exemplo, quatro ou mais quilobytes de cada vez), você não deve precisar de um buffer. No entanto, se você chamar Write para gravar pequenas partes de dados, um buffer de gravação melhorará o desempenho do aplicativo.
Por padrão, um objeto CInternetFile
não fornece buffer para gravação. Se você chamar essa função de membro, deve ter certeza de que o arquivo foi aberto para acesso de gravação. Você pode alterar o tamanho do buffer de gravação a qualquer momento, mas isso causa uma chamada implícita para Flush.
CInternetFile::Write
Chame essa função de membro para gravar na memória fornecida, lpvBuf, o número especificado de bytes, nCount.
virtual void Write(
const void* lpBuf,
UINT nCount);
Parâmetros
lpBuf
Um ponteiro do primeiro byte a ser gravado.
nCount
Especifica o número de bytes a serem gravados.
Comentários
Se ocorrer algum erro ao gravar os dados, a função gerará um objeto CInternetException que descreve o erro.
CInternetFile::WriteString
Essa função grava uma cadeia de caracteres terminada em nulo no arquivo associado.
virtual void WriteString(LPCTSTR pstr);
Parâmetros
pstr
Um ponteiro para uma cadeia de caracteres que contém o conteúdo a ser gravado.
Comentários
Se ocorrer algum erro ao gravar os dados, a função gerará um objeto CInternetException que descreve o erro.
Confira também
Classe CStdioFile
Gráfico da hierarquia
Classe CInternetConnection