Udostępnij za pośrednictwem


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 Openskładowe , LockRange, UnlockRangei 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

Obiekt CObject

CFile

CStdioFile

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 CInternetFileprzez 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 SetReadBufferSizemetody , otrzymasz bufor 4096 bajtów.

CInternetFile::SetWriteBufferSize

Wywołaj tę funkcję składową, aby ustawić rozmiar tymczasowego buforu zapisu używanego CInternetFileprzez 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