Freigeben über


CStdioFile-Klasse

Stellt eine C-Laufzeitdatenstromdatei dar, wie sie von der Laufzeitfunktion fopengeöffnet wird.

Syntax

class CStdioFile : public CFile

Member

Öffentliche Konstruktoren

Name Beschreibung
CStdioFile::CStdioFile Erstellt ein CStdioFile Objekt aus einem Pfad- oder Dateizeiger.

Öffentliche Methoden

Name Beschreibung
CStdioFile::Open Überladen. Open wurde für die Verwendung mit dem Standardkonstruktor CStdioFile (Overrides CFile::Open) entwickelt.
CStdioFile::ReadString Liest eine einzelne Textzeile vor.
CStdioFile::Seek Positioniert den aktuellen Dateizeiger.
CStdioFile::WriteString Schreibt eine einzelne Textzeile.

Öffentliche Datenmember

Name Beschreibung
CStdioFile::m_pStream Enthält einen Zeiger auf eine geöffnete Datei.

Hinweise

Streamdateien werden gepuffert und können entweder im Textmodus (Standard) oder im Binärmodus geöffnet werden.

Der Textmodus bietet eine spezielle Verarbeitung für Wagenrücklauf-Einzugspaare. Wenn Sie ein Zeilenvorschubzeichen (Newline) (0x0A) in ein Textmodusobjekt CStdioFile schreiben, wird das Bytepaar (0x0D, 0x0A) an die Datei gesendet. Beim Lesen wird das Bytepaar (0x0D, 0x0A) in ein einzelnes 0x0A Byte übersetzt.

Die CFile Funktionen Duplicate, LockRangeund UnlockRange werden für CStdioFile.

Wenn Sie diese Funktionen für eine CStdioFileFunktion aufrufen, erhalten Sie eine CNotSupportedException.

Weitere Informationen zur Verwendung CStdioFilefinden Sie in den Artikeln "Dateien in MFC " und "Dateibehandlung " in der Laufzeitbibliotheksreferenz.

Vererbungshierarchie

CObject

CFile

CStdioFile

Anforderungen

Header: afx.h

CStdioFile::CStdioFile

Erstellt und initialisiert ein CStdioFile-Objekt.

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

CStdioFile(
    LPCTSTR lpszFileName,
    UINT nOpenFlags);

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

Parameter

pOpenStream
Gibt den Dateizeiger an, der von einem Aufruf der C-Laufzeitfunktion fopenzurückgegeben wird.

lpszFileName
Gibt eine Zeichenfolge an, die den Pfad zur gewünschten Datei darstellt. Der Pfad kann relativ oder absolut sein.

nOpenFlags
Gibt Optionen für dateierstellungs-, Dateifreigabe- und Dateizugriffsmodi an. Sie können mehrere Optionen angeben, indem Sie den bitweisen OR ( | ) -Operator verwenden.

Es ist eine Option für den Dateizugriff erforderlich; Andere Modi sind optional. Eine Liste der Modusoptionen und andere Flags finden Sie unter.See CFile::CFile for a list of mode options and other flags. In MFC Version 3.0 und höher sind Freigabekennzeichnungen zulässig.

pTM
Zeiger auf das CAtlTransactionManager-Objekt.

Hinweise

Der Standardkonstruktor fügt keine Datei an das CStdioFile Objekt an. Wenn Sie diesen Konstruktor verwenden, müssen Sie die CStdioFile::Open Methode verwenden, um eine Datei zu öffnen und an das CStdioFile Objekt anzufügen.

Der Konstruktor mit einem einzigen Parameter fügt einen geöffneten Dateidatenstrom an das CStdioFile Objekt an. Zulässige Zeigerwerte sind die vordefinierten Eingabe-/Ausgabedateizeiger stdin, oder stdoutstderr.

Der Konstruktor mit zwei Parametern erstellt ein CStdioFile Objekt und öffnet die entsprechende Datei mit dem angegebenen Pfad.

Wenn Sie entweder eine oder mehrere Konstruktoren übergebenNULL, löst der Konstruktor eine CInvalidArgException*.lpszFileNamepOpenStream

Wenn die Datei nicht geöffnet oder erstellt werden kann, löst der Konstruktor einen CFileException*.

Beispiel

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

Das m_pStream Datenelement ist der Zeiger auf eine geöffnete Datei, wie sie von der C-Laufzeitfunktion fopenzurückgegeben wird.

FILE* m_pStream;

Hinweise

NULL Die Datei wurde nie geöffnet oder geschlossen.

CStdioFile::Open

Überladen. Open wurde für die Verwendung mit dem Standardkonstruktor CStdioFile entwickelt.

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

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

Parameter

lpszFileName
Eine Zeichenfolge, die den Pfad zur gewünschten Datei darstellt. Der Pfad kann relativ oder absolut sein.

nOpenFlags
Freigabe- und Zugriffsmodus. Gibt die auszuführende Aktion beim Öffnen der Datei an. Sie können Optionen mithilfe des Bitweise-OR(|)-Operators kombinieren. Eine Zugriffsberechtigung und eine Freigabeoption sind erforderlich; die Modi "modeCreate" und "modeNoInherit" sind optional.

pError
Ein Zeiger auf ein vorhandenes Datei-Ausnahmeobjekt, das den Status eines fehlgeschlagenen Vorgangs empfängt.

pTM
Zeiger auf ein CAtlTransactionManager Objekt.

Rückgabewert

TRUE, wenn erfolgreich, andernfalls FALSE.

Hinweise

CStdioFile::ReadString

Liest Textdaten in einen Puffer, bis zu einem Grenzwert von nMax-1 Zeichen, aus der Datei, die dem CStdioFile Objekt zugeordnet ist.

virtual LPTSTR ReadString(
    LPTSTR lpsz,
    UINT nMax);

virtual BOOL ReadString(CString& rString);

Parameter

lpsz
Gibt einen Zeiger auf einen vom Benutzer bereitgestellten Puffer an, der eine mit Null beendete Textzeichenfolge empfängt.

nMax
Gibt die maximale Anzahl von Zeichen an, die in den lpsz Puffer geschrieben werden sollen, einschließlich der endenden Null.

rString
Ein Verweis auf ein CString Objekt, das die Zeichenfolge enthält, wenn die Funktion zurückgegeben wird.

Rückgabewert

Ein Zeiger auf den Puffer, der die Textdaten enthält. NULL wenn das Ende der Datei erreicht wurde, ohne Daten zu lesen; oder wenn boolescher Wert erreicht wurde, wenn das Ende der Datei erreicht wurde, FALSE ohne Daten zu lesen.

Hinweise

Das Lesen wird durch das erste Zeilenumbruchzeichen beendet. Wenn in diesem Fall weniger als nMax-1 Zeichen gelesen wurden, wird ein Neuzeilenzeichen im Puffer gespeichert. In beiden Fällen wird ein NULL-Zeichen ('\0') angefügt.

CFile::Read ist auch für Textmoduseingaben verfügbar, wird jedoch nicht bei einem Wagenrücklauf-Zeilenvorschubpaar beendet.

Hinweis

Die CString Version dieser Funktion entfernt die '\n' falls vorhanden; die LPTSTR Version nicht.

Beispiel

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

f.ReadString(buf, 99);

CStdioFile::Seek

Positioniert den Zeiger in einer zuvor geöffneten Datei neu.

virtual ULONGLONG Seek(
    LONGLONG lOff,
    UINT nFrom);

Parameter

lOff
Die Anzahl der Bytes, um den Zeiger zu verschieben.

nFrom
Zeigerbewegungsmodus. Dies muss einer der folgenden Werte sein:

  • CFile::begin: Verschieben Sie die Dateizeigerbytes lOff vom Anfang der Datei nach vorne.

  • CFile::current: Verschieben Sie die Dateizeigerbytes lOff von der aktuellen Position in der Datei.

  • CFile::end: Verschieben Sie die Dateizeigerbytes lOff vom Ende der Datei. Beachten Sie, dass lOff die Suche in die vorhandene Datei negativ sein muss. Positive Werte suchen über das Ende der Datei.

Rückgabewert

Wenn die angeforderte Position legal ist, Seek wird der neue Byte-Offset vom Anfang der Datei zurückgegeben. Andernfalls ist der Rückgabewert nicht definiert und ein CFileException Objekt wird ausgelöst.

Hinweise

Die Seek Funktion ermöglicht den zufälligen Zugriff auf den Inhalt einer Datei, indem der Zeiger eine bestimmte Menge, absolut oder relativ, verschoben wird. Während der Suche werden keine Daten gelesen. Wenn die angeforderte Position größer als die Größe der Datei ist, wird die Dateilänge an diese Position erweitert, und es wird keine Ausnahme ausgelöst.

Wenn eine Datei geöffnet wird, wird der Dateizeiger am Offset 0, dem Anfang der Datei, positioniert.

Diese Implementierung Seek basiert auf der Run-Time Library (CRT)-Funktion fseek. Es gibt mehrere Grenzwerte für die Verwendung von Seek Datenströmen, die im Textmodus geöffnet werden. Weitere Informationen finden Sie unter fseek, _fseeki64verwalten.

Beispiel

Das folgende Beispiel zeigt, wie Seek Der Zeiger 1000 Bytes vom Anfang der cfile Datei verschoben wird. Beachten Sie, dass Seek keine Daten gelesen werden, daher müssen Sie anschließend aufrufen CStdioFile::ReadString , um Daten zu lesen.

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

CStdioFile::WriteString

Schreibt Daten aus einem Puffer in die datei, die dem CStdioFile Objekt zugeordnet ist.

virtual void WriteString(LPCTSTR lpsz);

Parameter

lpsz
Gibt einen Zeiger auf einen Puffer an, der eine mit Null beendete Zeichenfolge enthält.

Hinweise

Das endende Nullzeichen ( \0) wird nicht in die Datei geschrieben. Mit dieser Methode werden Zeilenumbruchzeichen in lpsz die Datei als Wagenrücklaufzeilenvorschubpaar geschrieben.

Wenn Sie Daten schreiben möchten, die nicht NULL-beendet in eine Datei sind, verwenden CStdioFile::Write Oder CFile::Write.

Diese Methode löst einCInvalidArgException*, wenn Sie für den lpsz Parameter angebenNULL.

Diese Methode löst eine CFileException* Antwort auf Dateisystemfehler aus.

Beispiel

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

f.WriteString(buf);

Siehe auch

CFile Klasse
Hierarchiediagramm
CFile Klasse
CFile::Duplicate
CFile::LockRange
CFile::UnlockRange
CNotSupportedException Klasse