CStdioFile
-Klasse
Stellt eine C-Laufzeitdatenstromdatei dar, wie sie von der Laufzeitfunktion fopen
geö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
, LockRange
und UnlockRange
werden für CStdioFile
.
Wenn Sie diese Funktionen für eine CStdioFile
Funktion aufrufen, erhalten Sie eine CNotSupportedException
.
Weitere Informationen zur Verwendung CStdioFile
finden Sie in den Artikeln "Dateien in MFC " und "Dateibehandlung " in der Laufzeitbibliotheksreferenz.
Vererbungshierarchie
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 fopen
zurü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 stdout
stderr
.
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*
.lpszFileName
pOpenStream
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 fopen
zurü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 DateizeigerbyteslOff
vom Anfang der Datei nach vorne.CFile::current
: Verschieben Sie die DateizeigerbyteslOff
von der aktuellen Position in der Datei.CFile::end
: Verschieben Sie die DateizeigerbyteslOff
vom Ende der Datei. Beachten Sie, dasslOff
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
, _fseeki64
verwalten.
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