Dela via


CStdioFile-klass

Representerar en C-körningsströmfil som öppnas av körningsfunktionen fopen.

Syntax

class CStdioFile : public CFile

Medlemmar

Offentliga konstruktorer

Namn Beskrivning
CStdioFile::CStdioFile Konstruerar ett CStdioFile objekt från en sökväg eller filpekare.

Offentliga metoder

Namn Beskrivning
CStdioFile::Open Överbelastad. Open är utformat för användning med standardkonstruktorn CStdioFile (åsidosättningar CFile::Open).
CStdioFile::ReadString Läser en enda textrad.
CStdioFile::Seek Placerar den aktuella filpekaren.
CStdioFile::WriteString Skriver en enda textrad.

Medlemmar i offentliga data

Namn Beskrivning
CStdioFile::m_pStream Innehåller en pekare till en öppen fil.

Anmärkningar

Stream-filer buffrad och kan öppnas i antingen textläge (standard) eller binärt läge.

Textläget ger särskild bearbetning för returlinjematningspar för vagn. När du skriver ett radmatningstecken (newline) (0x0A) till ett textlägesobjekt CStdioFile skickas byteparet (0x0D, 0x0A) till filen. När du läser översätts byteparet (0x0D, 0x0A) till en enda 0x0A byte.

Funktionerna CFileDuplicate, LockRangeoch UnlockRange stöds inte för CStdioFile.

Om du anropar dessa funktioner på en CStdioFilefår du en CNotSupportedException.

Mer information om hur du använder CStdioFilefinns i artiklarna Filer i MFC och Filhantering i Run-Time-biblioteksreferensen.

Arvshierarki

CObject

CFile

CStdioFile

Kravspecifikation

rubrik:afx.h

CStdioFile::CStdioFile

Konstruerar och initierar ett CStdioFile objekt.

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

CStdioFile(
    LPCTSTR lpszFileName,
    UINT nOpenFlags);

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

Parameterar

pOpenStream
Anger filpekaren som returneras av ett anrop till C-körningsfunktionen fopen.

lpszFileName
Anger en sträng som är sökvägen till den önskade filen. Sökvägen kan vara relativ eller absolut.

nOpenFlags
Anger alternativ för att skapa filer, fildelning och filåtkomstlägen. Du kan ange flera alternativ med hjälp av operatorn bitvis OR ( | ).

Ett alternativ för filåtkomstläge krävs. andra lägen är valfria. Se CFile::CFile en lista över lägesalternativ och andra flaggor. I MFC version 3.0 och senare tillåts delningsflaggor.

pTM
Pekare till CAtlTransactionManager objekt.

Anmärkningar

Standardkonstruktorn bifogar inte en fil till objektet CStdioFile . När du använder den här konstruktorn måste du använda CStdioFile::Open metoden för att öppna en fil och koppla den CStdioFile till objektet.

Konstruktorn med en parameter kopplar en öppen filström till CStdioFile objektet. Tillåtna pekarvärden inkluderar fördefinierade in- och utdatafilpekare stdin, stdouteller stderr.

Konstruktorn med två parametrar skapar ett CStdioFile objekt och öppnar motsvarande fil med den angivna sökvägen.

Om du skickar NULL för antingen pOpenStream eller lpszFileNamegenererar konstruktorn en CInvalidArgException*.

Om filen inte kan öppnas eller skapas genererar konstruktorn en CFileException*.

Exempel

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

Datamedlemmen m_pStream är pekaren till en öppen fil som returneras av C-körningsfunktionen fopen.

FILE* m_pStream;

Anmärkningar

Det är NULL om filen aldrig har öppnats eller har stängts.

CStdioFile::Open

Överbelastad. Open är utformat för användning med standardkonstruktorn CStdioFile .

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

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

Parameterar

lpszFileName
En sträng som är sökvägen till önskad fil. Sökvägen kan vara relativ eller absolut.

nOpenFlags
Delnings- och åtkomstläge. Anger vilken åtgärd som ska vidtas när filen öppnas. Du kan kombinera alternativ med hjälp av operatorn bitwise-OR (|). Det krävs en åtkomstbehörighet och ett resursalternativ. lägeSkapa och lägeNoInherit är valfria.

pError
En pekare till ett befintligt filfelsobjekt som får statusen för en misslyckad åtgärd.

pTM
Pekare till ett CAtlTransactionManager objekt.

Returvärde

TRUE om det lyckas. annars FALSE.

Anmärkningar

CStdioFile::ReadString

Läser textdata till en buffert, upp till en gräns på nMax-1 tecken, från filen som är associerad med CStdioFile objektet.

virtual LPTSTR ReadString(
    LPTSTR lpsz,
    UINT nMax);

virtual BOOL ReadString(CString& rString);

Parameterar

lpsz
Anger en pekare till en buffert från användaren som får en null-avslutad textsträng.

nMax
Anger det maximala antalet tecken som ska skrivas till bufferten lpsz , inklusive avslutande null.

rString
En referens till ett CString objekt som innehåller strängen när funktionen returneras.

Returvärde

En pekare till bufferten som innehåller textdata. NULL om filslut nåddes utan att läsa några data; eller om boolesk, FALSE om slutet av filen nåddes utan att läsa några data.

Anmärkningar

Läsningen stoppas av det första nyradstecknet. Om färre än nMax-1 tecken har lästs lagras ett nytt radtecken i bufferten. Ett null-tecken ('\0') läggs till i båda fallen.

CFile::Read är också tillgängligt för textlägesindata, men avslutas inte på ett returlinjematningspar för vagn.

Anmärkning

Versionen CString av den här funktionen tar bort '\n' om det LPTSTR finns. Versionen gör det inte.

Exempel

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

f.ReadString(buf, 99);

CStdioFile::Seek

Flyttar pekaren i en tidigare öppnad fil.

virtual ULONGLONG Seek(
    LONGLONG lOff,
    UINT nFrom);

Parameterar

lOff
Antal byte för att flytta pekaren.

nFrom
Rörelseläge för pekare. Måste vara något av följande värden:

  • CFile::begin: Flytta filpekaren lOff byte framåt från början av filen.

  • CFile::current: Flytta filpekarens lOff byte från den aktuella positionen i filen.

  • CFile::end: Flytta filpekarens lOff byte från slutet av filen. Observera att lOff måste vara negativt för att söka i den befintliga filen. Positiva värden söker sig förbi slutet av filen.

Returvärde

Om den begärda positionen är laglig Seek returnerar den nya byteförskjutningen från början av filen. Annars är returvärdet odefinierat och ett CFileException objekt genereras.

Anmärkningar

Funktionen Seek tillåter slumpmässig åtkomst till en fils innehåll genom att flytta pekaren en angiven mängd, absolut eller relativt. Inga data läss faktiskt under söksökningen. Om den begärda positionen är större än storleken på filen utökas fillängden till den positionen och inget undantag utlöses.

När en fil öppnas placeras filpekaren vid förskjutning 0, i början av filen.

Den här implementeringen av Seek baseras på funktionen fseekRun-Time Library (CRT). Det finns flera begränsningar för användningen av Seek på strömmar som öppnas i textläge. Mer information finns i fseek, _fseeki64.

Exempel

I följande exempel visas hur du använder Seek för att flytta pekaren 1 000 byte från början av cfile filen. Observera att Seek inte läser data, så du måste anropa för CStdioFile::ReadString att läsa data.

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

CStdioFile::WriteString

Skriver data från en buffert till filen som är associerad med CStdioFile objektet.

virtual void WriteString(LPCTSTR lpsz);

Parameterar

lpsz
Anger en pekare till en buffert som innehåller en null-avslutad sträng.

Anmärkningar

Det avslutande null-tecknet (\0) skrivs inte till filen. Den här metoden skriver nya radtecken i lpsz filen som ett vagnreturradsmatningspar.

Om du vill skriva data som inte är null-avslutade till en fil använder du CStdioFile::Write eller CFile::Write.

Den här metoden genererar en CInvalidArgException* om du anger NULL för parametern lpsz .

Den här metoden genererar ett CFileException* svar på filsystemfel.

Exempel

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

f.WriteString(buf);

Se även

CFile klass
hierarkidiagram
CFile klass
CFile::Duplicate
CFile::LockRange
CFile::UnlockRange
CNotSupportedException klass