Condividi tramite


Classe CStdioFile

Rappresenta un file di flusso di runtime C aperto dalla funzione fopendi runtime .

Sintassi

class CStdioFile : public CFile

Membri

Costruttori pubblici

Nome Descrizione
CStdioFile::CStdioFile Costruisce un CStdioFile oggetto da un percorso o da un puntatore di file.

Metodi pubblici

Nome Descrizione
CStdioFile::Open Con overload. Open è progettato per l'uso con il costruttore predefinito CStdioFile (override CFile::Open).
CStdioFile::ReadString Legge una singola riga di testo.
CStdioFile::Seek Posiziona il puntatore al file corrente.
CStdioFile::WriteString Scrive una singola riga di testo.

Membri dati pubblici

Nome Descrizione
CStdioFile::m_pStream Contiene un puntatore a un file aperto.

Osservazioni:

I file di flusso vengono memorizzati nel buffer e possono essere aperti in modalità testo (impostazione predefinita) o in modalità binaria.

La modalità testo fornisce un'elaborazione speciale per le coppie di avanzamento ritorno a capo. Quando si scrive un carattere di avanzamento riga (nuova riga) (0x0A) in un oggetto in modalità CStdioFile testo, la coppia di byte (0x0D, 0x0A) viene inviata al file. Quando si legge, la coppia di byte (0x0D, 0x0A) viene convertita in un singolo byte 0x0A.

Le CFile funzioni Duplicate, LockRangee UnlockRange non sono supportate per CStdioFile.

Se si chiamano queste funzioni in un CStdioFileoggetto , si otterrà un oggetto CNotSupportedException.

Per altre informazioni sull'uso CStdioFiledi , vedere gli articoli File in MFC e Gestione dei file nelle informazioni di riferimento sulla libreria di runtime.

Gerarchia di ereditarietà

CObject

CFile

CStdioFile

Requisiti

Intestazione: afx.h

CStdioFile::CStdioFile

Costruisce e inizializza un oggetto CStdioFile.

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

CStdioFile(
    LPCTSTR lpszFileName,
    UINT nOpenFlags);

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

Parametri

pOpenStream
Specifica il puntatore al file restituito da una chiamata alla funzione fopendi runtime C .

lpszFileName
Specifica una stringa che rappresenta il percorso del file desiderato. Il percorso può essere relativo o assoluto.

nOpenFlags
Specifica le opzioni per la creazione di file, la condivisione di file e le modalità di accesso ai file. È possibile specificare più opzioni usando l'operatore OR bit per bit ( | ).

È necessaria un'opzione per la modalità di accesso ai file; altre modalità sono facoltative. Vedere CFile::CFile per un elenco di opzioni di modalità e altri flag. In MFC versione 3.0 e successive sono consentiti flag di condivisione.

pTM
Puntatore all'oggetto CAtlTransactionManager.

Osservazioni:

Il costruttore predefinito non collega un file all'oggetto CStdioFile . Quando si usa questo costruttore, è necessario utilizzare il CStdioFile::Open metodo per aprire un file e allegarlo all'oggetto CStdioFile .

Il costruttore a parametro singolo collega un flusso di file aperto all'oggetto CStdioFile . I valori del puntatore consentiti includono i puntatori stdinai file di input/output predefiniti , stdouto stderr.

Il costruttore a due parametri crea un CStdioFile oggetto e apre il file corrispondente con il percorso specificato.

Se si passa NULL per pOpenStream o lpszFileName, il costruttore genera un'eccezione CInvalidArgException*.

Se il file non può essere aperto o creato, il costruttore genera un'eccezione CFileException*.

Esempio

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

Il m_pStream membro dati è il puntatore a un file aperto restituito dalla funzione fopendi runtime C .

FILE* m_pStream;

Osservazioni:

È NULL se il file non è mai stato aperto o è stato chiuso.

CStdioFile::Open

Con overload. Open è progettato per l'uso con il costruttore predefinito CStdioFile .

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

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

Parametri

lpszFileName
Stringa che rappresenta il percorso del file desiderato. Il percorso può essere relativo o assoluto.

nOpenFlags
Modalità di condivisione e accesso. Specifica l'azione da eseguire all'apertura del file. È possibile combinare le opzioni usando l'operatore OR bit per bit (|). Sono necessarie un'autorizzazione di accesso e un'opzione di condivisione; le modalitàCrea e modeNoInherit sono facoltative.

pError
Puntatore a un oggetto eccezione file esistente che riceve lo stato di un'operazione non riuscita.

pTM
Puntatore a un oggetto CAtlTransactionManager.

Valore restituito

TRUE se l'esito è positivo; in caso contrario, FALSE.

Osservazioni:

CStdioFile::ReadString

Legge i dati di testo in un buffer, fino a un limite di nMax-1 caratteri, dal file associato all'oggetto CStdioFile .

virtual LPTSTR ReadString(
    LPTSTR lpsz,
    UINT nMax);

virtual BOOL ReadString(CString& rString);

Parametri

lpsz
Specifica un puntatore a un buffer fornito dall'utente che riceverà una stringa di testo con terminazione Null.

nMax
Specifica il numero massimo di caratteri da scrivere nel lpsz buffer, incluso il valore Null di terminazione.

rString
Riferimento a un CString oggetto che conterrà la stringa quando la funzione restituisce.

Valore restituito

Puntatore al buffer contenente i dati di testo. NULL se la fine del file è stata raggiunta senza leggere alcun dato; o se booleano, FALSE se è stata raggiunta la fine del file senza leggere alcun dato.

Osservazioni:

La lettura viene arrestata dal primo carattere di nuova riga. Se, in tal caso, sono stati letti meno di nMax-1 caratteri, viene archiviato un carattere di nuova riga nel buffer. In entrambi i casi viene aggiunto un carattere Null ('\0').

CFile::Read è disponibile anche per l'input in modalità testo, ma non termina in una coppia di avanzamento ritorno a capo.

Nota

La CString versione di questa funzione rimuove l'oggetto '\n' se presente. La LPTSTR versione non è disponibile.

Esempio

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

f.ReadString(buf, 99);

CStdioFile::Seek

Riposiziona il puntatore in un file aperto in precedenza.

virtual ULONGLONG Seek(
    LONGLONG lOff,
    UINT nFrom);

Parametri

lOff
Numero di byte per spostare il puntatore.

nFrom
Modalità di spostamento del puntatore. Deve essere uno dei valori seguenti:

  • CFile::begin: spostare i byte del puntatore lOff del file in avanti dall'inizio del file.

  • CFile::current: spostare i byte del puntatore lOff del file dalla posizione corrente nel file.

  • CFile::end: spostare i byte del puntatore lOff del file dalla fine del file. Si noti che lOff deve essere negativo per eseguire la ricerca nel file esistente. I valori positivi cercheranno oltre la fine del file.

Valore restituito

Se la posizione richiesta è legale, Seek restituisce il nuovo offset di byte dall'inizio del file. In caso contrario, il valore restituito non è definito e viene generato un CFileException oggetto .

Osservazioni:

La Seek funzione consente l'accesso casuale al contenuto di un file spostando il puntatore di una quantità specificata, assolutamente o relativamente. Nessun dato viene effettivamente letto durante la ricerca. Se la posizione richiesta è maggiore delle dimensioni del file, la lunghezza del file verrà estesa a tale posizione e non verrà generata alcuna eccezione.

Quando un file viene aperto, il puntatore al file viene posizionato in corrispondenza dell'offset 0, all'inizio del file.

Questa implementazione di Seek è basata sulla funzione fseekCRT (Run-Time Library). Esistono diversi limiti all'utilizzo di Seek nei flussi aperti in modalità testo. Per altre informazioni, vedere fseeke _fseeki64.

Esempio

Nell'esempio seguente viene illustrato come usare Seek per spostare il puntatore di 1000 byte dall'inizio del cfile file. Si noti che Seek non legge i dati, quindi è necessario chiamare CStdioFile::ReadString successivamente per leggere i dati.

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

CStdioFile::WriteString

Scrive i dati da un buffer nel file associato all'oggetto CStdioFile .

virtual void WriteString(LPCTSTR lpsz);

Parametri

lpsz
Specifica un puntatore a un buffer contenente una stringa con terminazione Null.

Osservazioni:

Il carattere null di terminazione ( \0) non viene scritto nel file. Questo metodo scrive i caratteri di nuova riga nel lpsz file come coppia di avanzamento ritorno a capo.

Se si desidera scrivere dati non terminati con null in un file, usare CStdioFile::Write o CFile::Write.

Questo metodo genera un'eccezione CInvalidArgException* se si specifica NULL per il lpsz parametro .

Questo metodo genera un oggetto CFileException* in risposta agli errori del file system.

Esempio

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

f.WriteString(buf);

Vedi anche

CFile Classe
Grafico della gerarchia
CFile Classe
CFile::Duplicate
CFile::LockRange
CFile::UnlockRange
CNotSupportedException Classe