CStdioFile
Klasa
Reprezentuje plik strumienia czasu wykonywania języka C otwarty przez funkcję fopen
czasu 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
, LockRange
i 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
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 fopen
czasu 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 stdin
pliku wejściowego/wyjściowego , stdout
lub 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ę fopen
czasu 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źnikalOff
pliku do przodu od początku pliku.CFile::current
: Przenieś bajty wskaźnikalOff
pliku z bieżącej pozycji w pliku.CFile::end
: Przenieś bajty wskaźnikalOff
pliku z końca pliku. Należy pamiętać, żelOff
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 fseek
Biblioteka 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