Klasa CInternetFile
Umożliwia dostęp do plików w systemach zdalnych korzystających z protokołów internetowych.
Składnia
class CInternetFile : public CStdioFile
Elementy członkowskie
Konstruktory chronione
Nazwa/nazwisko | opis |
---|---|
CInternetFile::CInternetFile | CInternetFile Tworzy obiekt. |
Metody publiczne
Nazwa/nazwisko | opis |
---|---|
CInternetFile::Abort | Zamyka plik, ignorując wszystkie ostrzeżenia i błędy. |
CInternetFile::Close | Zamyka obiekt CInternetFile i zwalnia swoje zasoby. |
CInternetFile::Flush | Opróżnia zawartość buforu zapisu i upewnia się, że dane w pamięci są zapisywane na maszynie docelowej. |
CInternetFile::GetLength | Zwraca rozmiar pliku. |
CInternetFile::Read | Odczytuje liczbę określonych bajtów. |
CInternetFile::ReadString | Odczytuje strumień znaków. |
CInternetFile::Seek | Zmienia położenie wskaźnika w otwartym pliku. |
CInternetFile::SetReadBufferSize | Ustawia rozmiar buforu, w którym będą odczytywane dane. |
CInternetFile::SetWriteBufferSize | Ustawia rozmiar buforu, w którym będą zapisywane dane. |
CInternetFile::Write | Zapisuje liczbę określonych bajtów. |
CInternetFile::WriteString | Zapisuje ciąg o wartości null do pliku. |
Operatory publiczne
Nazwa/nazwisko | opis |
---|---|
CInternetFile::operator HINTERNET | Operator rzutowania dla uchwytu internetowego. |
Chronione składowe danych
Nazwa/nazwisko | opis |
---|---|
CInternetFile::m_hFile | Dojście do pliku. |
Uwagi
Udostępnia klasę bazową dla klas plików CHttpFile i CGopherFile . Nigdy nie tworzysz CInternetFile
obiektu bezpośrednio. Zamiast tego utwórz obiekt jednej z jego klas pochodnych, wywołując metodę CGopherConnection::OpenFile lub CHttpConnection::OpenRequest. Obiekt można również utworzyć CInternetFile
, wywołując polecenie CFtpConnection::OpenFile.
Funkcje CInternetFile
Open
składowe , LockRange
, UnlockRange
i Duplicate
nie są implementowane dla elementu CInternetFile
. Jeśli wywołasz te funkcje w CInternetFile
obiekcie, otrzymasz wyjątek CNotSupportedException.
Aby dowiedzieć się więcej o CInternetFile
sposobie pracy z innymi klasami internetowymi MFC, zobacz artykuł Programowanie internetowe za pomocą usługi WinInet.
Hierarchia dziedziczenia
CInternetFile
Wymagania
Nagłówek: afxinet.h
CInternetFile::Abort
Zamyka plik skojarzony z tym obiektem i sprawia, że plik jest niedostępny do odczytu lub zapisu.
virtual void Abort();
Uwagi
Jeśli plik nie został zamknięty przed zniszczeniem obiektu, destruktor zamknie go za Ciebie.
W przypadku obsługi wyjątków Abort
różni się od opcji Zamknij na dwa ważne sposoby. Najpierw funkcja nie zgłasza wyjątku dotyczącego błędów, Abort
ponieważ ignoruje błędy. Po drugie, nie potwierdza, Abort
czy plik nie został otwarty lub został wcześniej zamknięty.
CInternetFile::CInternetFile
Ta funkcja składowa jest wywoływana CInternetFile
podczas tworzenia obiektu.
CInternetFile(
HINTERNET hFile,
LPCTSTR pstrFileName,
CInternetConnection* pConnection,
BOOL bReadMode);
CInternetFile(
HINTERNET hFile,
HINTERNET hSession,
LPCTSTR pstrFileName,
LPCTSTR pstrServer,
DWORD_PTR dwContext,
BOOL bReadMode);
Parametry
hFile
Dojście do pliku internetowego.
pstrFileName
Wskaźnik do ciągu zawierającego nazwę pliku.
Połączenie p
Wskaźnik do obiektu CInternetConnection .
bReadMode
Wskazuje, czy plik jest tylko do odczytu.
hSession
Dojście do sesji internetowej.
pstrServer
Wskaźnik do ciągu zawierającego nazwę serwera.
dwContext
Identyfikator CInternetFile
kontekstu obiektu. Aby uzyskać więcej informacji na temat identyfikatora kontekstu, zobacz WinInet Basics (Podstawy systemu WinInet).
Uwagi
Nigdy nie tworzysz CInternetFile
obiektu bezpośrednio. Zamiast tego utwórz obiekt jednej z jego klas pochodnych, wywołując metodę CGopherConnection::OpenFile lub CHttpConnection::OpenRequest. Obiekt można również utworzyć CInternetFile
, wywołując polecenie CFtpConnection::OpenFile.
CInternetFile::Close
Zamyka obiekt CInternetFile
i zwalnia dowolny z jego zasobów.
virtual void Close();
Uwagi
Jeśli plik został otwarty do zapisu, istnieje niejawne wywołanie funkcji Flush w celu zapewnienia, że wszystkie buforowane dane są zapisywane na hoście. Wywołaj metodę Close
po zakończeniu korzystania z pliku.
CInternetFile::Flush
Wywołaj tę funkcję składową, aby opróżnić zawartość buforu zapisu.
virtual void Flush();
Uwagi
Użyj Flush
polecenia , aby zapewnić, że wszystkie dane w pamięci zostały zapisane na maszynie docelowej i aby zapewnić, że transakcja z maszyną hosta została ukończona. Flush
jest skuteczny tylko w CInternetFile
obiektach otwartych do zapisu.
CInternetFile::GetLength
Zwraca rozmiar pliku.
virtual ULONGLONG GetLength() const;
CInternetFile::m_hFile
Dojście do pliku skojarzonego z tym obiektem.
HINTERNET m_hFile;
CInternetFile::operator HINTERNET
Użyj tego operatora, aby uzyskać dojście systemu Windows dla bieżącej sesji internetowej.
operator HINTERNET() const;
CInternetFile::Read
Wywołaj tę funkcję składową, aby odczytać daną pamięć, zaczynając od lpvBuf, określonej liczby bajtów, nCount.
virtual UINT Read(
void* lpBuf,
UINT nCount);
Parametry
lpBuf
Wskaźnik do adresu pamięci, do którego są odczytywane dane pliku.
nCount
Liczba bajtów do zapisania.
Wartość zwracana
Liczba bajtów przesłanych do buforu. Wartość zwracana może być mniejsza niż nCount , jeśli osiągnięto koniec pliku.
Uwagi
Funkcja zwraca liczbę bajtów faktycznie odczytanych — liczbę, która może być mniejsza niż nCount , jeśli plik zakończy się. Jeśli podczas odczytywania pliku wystąpi błąd, funkcja zgłasza obiekt CInternetException opisujący błąd. Należy pamiętać, że odczytywanie po końcu pliku nie jest traktowane jako błąd i nie zostanie zgłoszony żaden wyjątek.
Aby upewnić się, że wszystkie dane są pobierane, aplikacja musi nadal wywoływać metodę CInternetFile::Read
, dopóki metoda nie zwróci zera.
CInternetFile::ReadString
Wywołaj tę funkcję składową, aby odczytać strumień znaków, dopóki nie znajdzie nowego znaku wiersza.
virtual BOOL ReadString(CString& rString);
virtual LPTSTR ReadString(
LPTSTR pstr,
UINT nMax);
Parametry
pstr
Wskaźnik do ciągu, który otrzyma odczytywany wiersz.
nMax
Maksymalna liczba znaków do odczytania.
rString
Odwołanie do obiektu CString , który odbiera wiersz odczytu.
Wartość zwracana
Wskaźnik do buforu zawierającego zwykłe dane pobrane z obiektu CInternetFile . Niezależnie od typu danych buforu przekazanego do tej metody nie wykonuje żadnych manipulacji na danych (na przykład konwersji na Unicode), dlatego należy zamapować zwrócone dane na oczekiwaną strukturę, tak jakby void
* typ został zwrócony.
WARTOŚĆ NULL, jeśli osiągnięto koniec pliku bez odczytywania żadnych danych; lub, jeśli wartość logiczna, FAŁSZ, jeśli osiągnięto koniec pliku bez odczytywania żadnych danych.
Uwagi
Funkcja umieszcza wynikowy wiersz w pamięci, do których odwołuje się parametr pstr . Zatrzymuje odczytywanie znaków, gdy osiągnie maksymalną liczbę znaków określoną przez nMax. Bufor zawsze otrzymuje znak null zakończenia.
Jeśli wywołasz metodę ReadString
bez uprzedniego wywołania metody SetReadBufferSize, otrzymasz bufor 4096 bajtów.
CInternetFile::Seek
Wywołaj tę funkcję składową, aby zmienić położenie wskaźnika w wcześniej otwartym pliku.
virtual ULONGLONG Seek(
LONGLONG lOffset,
UINT nFrom);
Parametry
lOffset
Przesunięcie w bajtach w celu przeniesienia wskaźnika odczytu/zapisu w pliku.
nFrom
Względne odwołanie do przesunięcia. Musi mieć jedną z następujących wartości:
CFile::begin
Przenieś wskaźnik pliku lOff bajtów do przodu od początku pliku.CFile::current
Przenieś wskaźnik pliku lOff bajtów z bieżącej pozycji w pliku.CFile::end
Przenieś wskaźnik pliku lOff bajtów z końca pliku. Funkcja lOff musi być ujemna, aby wyszukiwać w istniejącym pliku. Wartości dodatnie będą wyszukiwane obok końca pliku.
Wartość zwracana
Przesunięcie nowego bajtu od początku pliku, jeśli żądane stanowisko jest legalne; w przeciwnym razie wartość jest niezdefiniowana, a obiekt CInternetException jest zgłaszany.
Uwagi
Funkcja Seek
zezwala na losowy dostęp do zawartości pliku przez przeniesienie wskaźnika określoną kwotę, absolutnie lub stosunkowo. Podczas wyszukiwania nie są odczytywane żadne dane.
Obecnie wywołanie tej funkcji składowej jest obsługiwane tylko w przypadku danych skojarzonych z obiektami CHttpFile
. Nie jest obsługiwany w przypadku żądań FTP ani gopher. Jeśli wywołasz Seek
jedną z tych nieobsługiwanych usług, nastąpi powrót do kodu błędu Win32 ERROR_INTERNET_INVALID_OPERATION.
Po otwarciu pliku wskaźnik pliku jest przesunięty 0 na początku pliku.
Uwaga
Użycie Seek
może spowodować niejawne wywołanie funkcji Opróżnianie.
Przykład
Zobacz przykład implementacji klasy bazowej ( CFile::Seek).
CInternetFile::SetReadBufferSize
Wywołaj tę funkcję składową, aby ustawić rozmiar tymczasowego buforu odczytu używanego CInternetFile
przez obiekt pochodny.
BOOL SetReadBufferSize(UINT nReadSize);
Parametry
nReadSize
Żądany rozmiar buforu w bajtach.
Wartość zwracana
Bezzerowe, jeśli się powiedzie; w przeciwnym razie 0. Jeśli wywołanie zakończy się niepowodzeniem, funkcja Win32 GetLastError może zostać wywołana, aby określić przyczynę błędu.
Uwagi
Podstawowe interfejsy API WinInet nie wykonują buforowania, dlatego wybierz rozmiar buforu, który umożliwia aplikacji wydajne odczytywanie danych niezależnie od ilości danych do odczytu. Jeśli każde wywołanie funkcji Odczyt zwykle obejmuje dużą aountę danych (na przykład cztery lub więcej kilobajtów), nie należy potrzebować buforu. Jeśli jednak wywołasz Read
wywołanie w celu uzyskania małych fragmentów danych lub jeśli używasz funkcji ReadString do odczytywania poszczególnych wierszy naraz, bufor odczytu zwiększa wydajność aplikacji.
Domyślnie CInternetFile
obiekt nie zapewnia buforowania do odczytu. Jeśli wywołasz tę funkcję składową, musisz mieć pewność, że plik został otwarty w celu uzyskania dostępu do odczytu.
Rozmiar buforu można zwiększyć w dowolnym momencie, ale zmniejszanie buforu nie będzie miało żadnego wpływu. Jeśli wywołasz funkcję ReadString bez pierwszego wywołania SetReadBufferSize
metody , otrzymasz bufor 4096 bajtów.
CInternetFile::SetWriteBufferSize
Wywołaj tę funkcję składową, aby ustawić rozmiar tymczasowego buforu zapisu używanego CInternetFile
przez obiekt pochodny.
BOOL SetWriteBufferSize(UINT nWriteSize);
Parametry
nWriteSize
Rozmiar buforu w bajtach.
Wartość zwracana
Bezzerowe, jeśli się powiedzie; w przeciwnym razie 0. Jeśli wywołanie zakończy się niepowodzeniem, funkcja Win32 GetLastError może zostać wywołana, aby określić przyczynę błędu.
Uwagi
Podstawowe interfejsy API WinInet nie wykonują buforowania, dlatego wybierz rozmiar buforu, który umożliwia aplikacji wydajne zapisywanie danych niezależnie od ilości danych do zapisania. Jeśli każde wywołanie funkcji Zapisu zwykle obejmuje dużą ilość danych (na przykład cztery lub więcej kilobajtów naraz), nie należy potrzebować buforu. Jeśli jednak wywołasz metodę Write w celu zapisania małych fragmentów danych, bufor zapisu poprawi wydajność aplikacji.
Domyślnie CInternetFile
obiekt nie zapewnia buforowania do zapisu. Jeśli wywołasz tę funkcję składową, musisz mieć pewność, że plik został otwarty w celu uzyskania dostępu do zapisu. Rozmiar buforu zapisu można zmienić w dowolnym momencie, ale powoduje to niejawne wywołanie funkcji Flush.
CInternetFile::Write
Wywołaj tę funkcję składową, aby zapisać w danej pamięci, lpvBuf, określoną liczbę bajtów, nCount.
virtual void Write(
const void* lpBuf,
UINT nCount);
Parametry
lpBuf
Wskaźnik do pierwszego bajtu do zapisania.
nCount
Określa liczbę bajtów do zapisania.
Uwagi
Jeśli podczas zapisywania danych wystąpi błąd, funkcja zgłasza obiekt CInternetException opisujący błąd.
CInternetFile::WriteString
Ta funkcja zapisuje ciąg o wartości null do skojarzonego pliku.
virtual void WriteString(LPCTSTR pstr);
Parametry
pstr
Wskaźnik do ciągu zawierającego zawartość do zapisania.
Uwagi
Jeśli podczas zapisywania danych wystąpi błąd, funkcja zgłasza obiekt CInternetException opisujący błąd.
Zobacz też
Klasa CStdioFile
Wykres hierarchii
Klasa CInternetConnection