Udostępnij za pośrednictwem


CStdioFile Klasa

Reprezentuje plik strumienia czasu wykonywania języka C otwarty przez funkcję fopenczasu wykonywania .

Składnia

class CStdioFile : public CFile

Elementy członkowskie

Konstruktory publiczne

Nazwa/nazwisko opis
CStdioFile::CStdioFile CStdioFile Tworzy obiekt ze wskaźnika ścieżki lub pliku.

Metody publiczne

Nazwa/nazwisko opis
CStdioFile::Open Przeciążone. Funkcja Open jest przeznaczona do użycia z konstruktorem domyślnym CStdioFile (przesłonięcia CFile::Open).
CStdioFile::ReadString Odczytuje pojedynczy wiersz tekstu.
CStdioFile::Seek Umieszcza bieżący wskaźnik pliku.
CStdioFile::WriteString Zapisuje pojedynczy wiersz tekstu.

Publiczne elementy członkowskie danych

Nazwa/nazwisko opis
CStdioFile::m_pStream Zawiera wskaźnik do otwartego pliku.

Uwagi

Pliki strumienia są buforowane i można je otwierać w trybie tekstowym (domyślnym) lub binarnym.

Tryb tekstowy zapewnia specjalne przetwarzanie par zestawienia powrotu karetki. Gdy zapisujesz znak kanału informacyjnego (nowego wiersza) (0x0A) do obiektu trybu CStdioFile tekstowego, para bajtów (0x0D, 0x0A) jest wysyłana do pliku. Podczas odczytywania para bajtów (0x0D, 0x0A) jest tłumaczona na jeden bajt 0x0A.

Funkcje CFile Duplicate, LockRangei UnlockRange nie są obsługiwane dla programu CStdioFile.

Jeśli wywołasz te funkcje w obiekcie CStdioFile, otrzymasz wartość CNotSupportedException.

Aby uzyskać więcej informacji na temat korzystania z programu CStdioFile, zobacz artykuły Pliki w MFC i Obsługa plików w dokumentacji biblioteki czasu wykonywania.

Hierarchia dziedziczenia

CObject

CFile

CStdioFile

Wymagania

Nagłówek: afx.h

CStdioFile::CStdioFile

Tworzy i inicjuje CStdioFile obiekt.

CStdioFile();
CStdioFile(CAtlTransactionManager* pTM);
CStdioFile(FILE* pOpenStream);

CStdioFile(
    LPCTSTR lpszFileName,
    UINT nOpenFlags);

CStdioFile(
    LPCTSTR lpszFileName,
    UINT nOpenFlags,
    CAtlTransactionManager* pTM);

Parametry

pOpenStream
Określa wskaźnik pliku zwracany przez wywołanie funkcji fopenczasu wykonywania języka C .

lpszFileName
Określa ciąg, który jest ścieżką do żądanego pliku. Ścieżka może być względna lub bezwzględna.

nOpenFlags
Określa opcje tworzenia plików, udostępniania plików i trybów dostępu do plików. Można określić wiele opcji za pomocą operatora bitowego OR ( ). |

Wymagana jest jedna opcja trybu dostępu do plików; inne tryby są opcjonalne. Zobacz CFile::CFile listę opcji trybu i innych flag. W programie MFC w wersji 3.0 lub nowszej flagi udostępniania są dozwolone.

pTM
Wskaźnik do CAtlTransactionManager obiektu.

Uwagi

Domyślny konstruktor nie dołącza pliku do CStdioFile obiektu. W przypadku używania tego konstruktora CStdioFile::Open należy użyć metody , aby otworzyć plik i dołączyć go do CStdioFile obiektu.

Konstruktor jednoparametrowy dołącza otwarty strumień plików do CStdioFile obiektu. Dozwolone wartości wskaźnika obejmują wstępnie zdefiniowane wskaźniki stdinpliku wejściowego/wyjściowego , stdoutlub stderr.

Konstruktor dwuparametrowy CStdioFile tworzy obiekt i otwiera odpowiedni plik z daną ścieżką.

Jeśli przekażesz NULL element pOpenStream lub lpszFileName, konstruktor zgłosi wyjątek CInvalidArgException*.

Jeśli nie można otworzyć ani utworzyć pliku, konstruktor zgłasza błąd CFileException*.

Przykład

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

Element m_pStream członkowski danych jest wskaźnikiem do otwartego pliku zwróconego przez funkcję fopenczasu wykonywania języka C .

FILE* m_pStream;

Uwagi

Jest to NULL , jeśli plik nigdy nie został otwarty lub został zamknięty.

CStdioFile::Open

Przeciążone. Funkcja Open jest przeznaczona do użycia z konstruktorem domyślnym CStdioFile .

virtual BOOL Open(
    LPCTSTR lpszFileName,
    UINT nOpenFlags,
    CFileException* pError = NULL);

virtual BOOL Open(
    LPCTSTR lpszFileName,
    UINT nOpenFlags,
    CAtlTransactionManager* pTM,
    CFileException* pError = NULL);

Parametry

lpszFileName
Ciąg, który jest ścieżką do żądanego pliku. Ścieżka może być względna lub bezwzględna.

nOpenFlags
Udostępnianie i tryb dostępu. Określa akcję do wykonania podczas otwierania pliku. Opcje można łączyć za pomocą operatora bitowego OR (|). Wymagane jest jedno uprawnienie dostępu i jedna opcja udziału; tryb modeCreate i modeNoInherit są opcjonalne.

pError
Wskaźnik do istniejącego obiektu wyjątku pliku, który otrzyma stan operacji, która zakończy się niepowodzeniem.

pTM
Wskaźnik do CAtlTransactionManager obiektu.

Wartość zwracana

TRUE w przypadku powodzenia; w przeciwnym razie FALSE.

Uwagi

CStdioFile::ReadString

Odczytuje dane tekstowe do buforu( do limitu nMax-1 znaków) z pliku skojarzonego z obiektem CStdioFile .

virtual LPTSTR ReadString(
    LPTSTR lpsz,
    UINT nMax);

virtual BOOL ReadString(CString& rString);

Parametry

lpsz
Określa wskaźnik do buforu dostarczonego przez użytkownika, który będzie otrzymywać ciąg tekstowy o wartości null.

nMax
Określa maksymalną liczbę znaków do zapisu w buforze lpsz , w tym wartość null zakończenia.

rString
Odwołanie do CString obiektu, który będzie zawierać ciąg po powrocie funkcji.

Wartość zwracana

Wskaźnik do buforu zawierającego dane tekstowe. NULL jeśli osiągnięto koniec pliku bez odczytywania żadnych danych; lub jeśli wartość logiczna, FALSE jeśli osiągnięto koniec pliku bez odczytywania żadnych danych.

Uwagi

Odczyt jest zatrzymywany przez pierwszy znak nowego wiersza. Jeśli w takim przypadku odczytano mniej niż nMax-1 znaki, w buforze jest przechowywany znak nowego wiersza. Znak null ('\0') jest dołączany w obu przypadkach.

CFile::Read Jest również dostępny dla danych wejściowych w trybie tekstowym, ale nie kończy się na parze zestawienia powrotnego karetki.

Uwaga

Wersja CString tej funkcji usuwa '\n' wartość , jeśli jest obecna; LPTSTR wersja nie.

Przykład

CStdioFile f(stdin);
TCHAR buf[100];

f.ReadString(buf, 99);

CStdioFile::Seek

Zmienia położenie wskaźnika w wcześniej otwartym pliku.

virtual ULONGLONG Seek(
    LONGLONG lOff,
    UINT nFrom);

Parametry

lOff
Liczba bajtów do przeniesienia wskaźnika.

nFrom
Tryb ruchu wskaźnika. Musi mieć jedną z następujących wartości:

  • CFile::begin: Przenieś bajty wskaźnika lOff pliku do przodu od początku pliku.

  • CFile::current: Przenieś bajty wskaźnika lOff pliku z bieżącej pozycji w pliku.

  • CFile::end: Przenieś bajty wskaźnika lOff pliku z końca pliku. Należy pamiętać, że lOff wyszukiwanie w istniejącym pliku musi być ujemne. Wartości dodatnie będą wyszukiwać obok końca pliku.

Wartość zwracana

Jeśli żądane położenie jest legalne, Seek zwraca nowe przesunięcie bajtów od początku pliku. W przeciwnym razie wartość zwracana jest niezdefiniowana, a CFileException obiekt 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. Jeśli żądana pozycja jest większa niż rozmiar pliku, długość pliku zostanie przedłużona do tej pozycji i nie zostanie zgłoszony żaden wyjątek.

Po otwarciu pliku wskaźnik pliku jest umieszczony na przesunięciu 0 na początku pliku.

Ta implementacja Seek programu jest oparta na funkcji fseekBiblioteka czasu wykonywania (CRT). Istnieje kilka ograniczeń dotyczących użycia Seek strumieni otwartych w trybie tekstowym. Aby uzyskać więcej informacji, zobacz fseek, _fseeki64.

Przykład

W poniższym przykładzie pokazano, jak przenieść Seek wskaźnik 1000 bajtów od początku cfile pliku. Należy pamiętać, że Seek nie odczytuje danych, dlatego należy następnie wywołać metodę CStdioFile::ReadString odczytu danych.

CStdioFile cfile(_T("Stdio_Seek_File.dat"), CFile::modeWrite |
   CFile::modeCreate);
LONGLONG lOff = 1000;
ULONGLONG lActual = cfile.Seek(lOff, CFile::begin);

CStdioFile::WriteString

Zapisuje dane z buforu do pliku skojarzonego z obiektem CStdioFile .

virtual void WriteString(LPCTSTR lpsz);

Parametry

lpsz
Określa wskaźnik do buforu, który zawiera ciąg zakończony o wartości null.

Uwagi

Znak o wartości null zakończenia ( \0) nie jest zapisywany w pliku. Ta metoda zapisuje znaki nowego wiersza w lpsz pliku jako parę zestawienia powrotnego karetki.

Jeśli chcesz zapisać dane, które nie są zakończone wartością null do pliku, użyj polecenia CStdioFile::Write lub CFile::Write.

Ta metoda zgłasza wyjątek CInvalidArgException* w przypadku określenia NULL parametru lpsz .

Ta metoda zgłasza CFileException* błąd systemu plików w odpowiedzi na błędy systemu plików.

Przykład

CStdioFile f(stdout);
TCHAR buf[] = _T("test string");

f.WriteString(buf);

Zobacz też

CFile Klasa
Wykres hierarchii
CFile Klasa
CFile::Duplicate
CFile::LockRange
CFile::UnlockRange
CNotSupportedException Klasa