Classe CStdioFile
Rappresenta un file di flusso di runtime C aperto dalla funzione fopen
di 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
, LockRange
e UnlockRange
non sono supportate per CStdioFile
.
Se si chiamano queste funzioni in un CStdioFile
oggetto , si otterrà un oggetto CNotSupportedException
.
Per altre informazioni sull'uso CStdioFile
di , vedere gli articoli File in MFC e Gestione dei file nelle informazioni di riferimento sulla libreria di runtime.
Gerarchia di ereditarietà
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 fopen
di 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 stdin
ai file di input/output predefiniti , stdout
o 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 fopen
di 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 puntatorelOff
del file in avanti dall'inizio del file.CFile::current
: spostare i byte del puntatorelOff
del file dalla posizione corrente nel file.CFile::end
: spostare i byte del puntatorelOff
del file dalla fine del file. Si noti chelOff
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 fseek
CRT (Run-Time Library). Esistono diversi limiti all'utilizzo di Seek
nei flussi aperti in modalità testo. Per altre informazioni, vedere fseek
e _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