La classe CStdioFile
Représente un fichier de flux d’exécution C tel qu’ouvert par la fonction fopen
d’exécution.
Syntaxe
class CStdioFile : public CFile
Membres
Constructeurs publics
Nom | Description |
---|---|
CStdioFile::CStdioFile |
Construit un objet à partir d’un CStdioFile chemin d’accès ou d’un pointeur de fichier. |
Méthodes publiques
Nom | Description |
---|---|
CStdioFile::Open |
Surcharge. Open est conçu pour une utilisation avec le constructeur par défaut CStdioFile (remplacements CFile::Open ). |
CStdioFile::ReadString |
Lit une seule ligne de texte. |
CStdioFile::Seek |
Positionne le pointeur de fichier actuel. |
CStdioFile::WriteString |
Écrit une seule ligne de texte. |
Membres de données publics
Nom | Description |
---|---|
CStdioFile::m_pStream |
Contient un pointeur vers un fichier ouvert. |
Notes
Les fichiers de flux sont mis en mémoire tampon et peuvent être ouverts en mode texte (par défaut) ou en mode binaire.
Le mode texte fournit un traitement spécial pour les paires de saut de ligne de retour chariot. Lorsque vous écrivez un caractère de flux de ligne (nouvelle ligne) (0x0A) dans un objet en mode CStdioFile
texte, la paire d’octets (0x0D, 0x0A) est envoyée au fichier. Lorsque vous lisez, la paire d’octets (0x0D, 0x0A) est traduite en un octet de 0x0A unique.
Les CFile
fonctions Duplicate
, LockRange
et UnlockRange
ne sont pas prises en charge pour CStdioFile
.
Si vous appelez ces fonctions sur un CStdioFile
, vous obtiendrez un CNotSupportedException
.
Pour plus d’informations sur l’utilisationCStdioFile
, consultez les articles Fichiers dans MFC et Gestion des fichiers dans la référence de la bibliothèque d’exécution.
Hiérarchie d'héritage
CStdioFile
Spécifications
En-tête : afx.h
CStdioFile::CStdioFile
Construit et initialise un objet CStdioFile
.
CStdioFile();
CStdioFile(CAtlTransactionManager* pTM);
CStdioFile(FILE* pOpenStream);
CStdioFile(
LPCTSTR lpszFileName,
UINT nOpenFlags);
CStdioFile(
LPCTSTR lpszFileName,
UINT nOpenFlags,
CAtlTransactionManager* pTM);
Paramètres
pOpenStream
Spécifie le pointeur de fichier retourné par un appel à la fonction fopen
d’exécution C.
lpszFileName
Spécifie une chaîne qui correspond au chemin d’accès au fichier souhaité. Le chemin peut être relatif ou absolu.
nOpenFlags
Spécifie les options de création de fichiers, de partage de fichiers et de modes d’accès aux fichiers. Vous pouvez spécifier plusieurs options à l’aide de l’opérateur OR ( |
) au niveau du bit.
Une option de mode d’accès aux fichiers est requise ; d’autres modes sont facultatifs. Consultez CFile::CFile
la liste des options de mode et d’autres indicateurs. Dans MFC version 3.0 et ultérieure, les indicateurs de partage sont autorisés.
pTM
Pointeur vers l’objet CAtlTransactionManager
.
Notes
Le constructeur par défaut n’attache pas de fichier à l’objet CStdioFile
. Lorsque vous utilisez ce constructeur, vous devez utiliser la CStdioFile::Open
méthode pour ouvrir un fichier et l’attacher à l’objet CStdioFile
.
Le constructeur à paramètre unique attache un flux de fichiers ouvert à l’objet CStdioFile
. Les valeurs de pointeur autorisées incluent les pointeurs stdin
de fichier d’entrée/sortie prédéfinis, stdout
ou stderr
.
Le constructeur à deux paramètres crée un CStdioFile
objet et ouvre le fichier correspondant avec le chemin d’accès donné.
Si vous passez NULL
pour l’un ou l’autre pOpenStream
lpszFileName
, le constructeur lève un CInvalidArgException*
.
Si le fichier ne peut pas être ouvert ou créé, le constructeur lève un CFileException*
.
Exemple
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
Le m_pStream
membre de données est le pointeur vers un fichier ouvert tel qu’il est retourné par la fonction fopen
d’exécution C.
FILE* m_pStream;
Notes
C’est NULL
si le fichier n’a jamais été ouvert ou a été fermé.
CStdioFile::Open
Surcharge. Open est conçu pour une utilisation avec le constructeur par défaut CStdioFile
.
virtual BOOL Open(
LPCTSTR lpszFileName,
UINT nOpenFlags,
CFileException* pError = NULL);
virtual BOOL Open(
LPCTSTR lpszFileName,
UINT nOpenFlags,
CAtlTransactionManager* pTM,
CFileException* pError = NULL);
Paramètres
lpszFileName
Chaîne qui est le chemin d’accès au fichier souhaité. Le chemin peut être relatif ou absolu.
nOpenFlags
Mode de partage et d’accès. Spécifie l’action à entreprendre lors de l’ouverture du fichier. Vous pouvez combiner des options à l’aide de l’opérateur OR (|
) au niveau du bit. Une autorisation d’accès et une option de partage sont requises ; les modes modeCreate et modeNoInherit sont facultatifs.
pError
Pointeur vers un objet d’exception de fichier existant qui recevra l’état d’une opération ayant échoué.
pTM
Pointeur vers un CAtlTransactionManager
objet.
Valeur de retour
TRUE
en cas de réussite ; sinon, FALSE
.
Notes
CStdioFile::ReadString
Lit les données texte dans une mémoire tampon, jusqu’à une limite de nMax
-1 caractères, à partir du fichier associé à l’objet CStdioFile
.
virtual LPTSTR ReadString(
LPTSTR lpsz,
UINT nMax);
virtual BOOL ReadString(CString& rString);
Paramètres
lpsz
Spécifie un pointeur vers une mémoire tampon fournie par l’utilisateur qui recevra une chaîne de texte terminée par null.
nMax
Spécifie le nombre maximal de caractères à écrire dans la lpsz
mémoire tampon, y compris la valeur Null de fin.
rString
Référence à un CString
objet qui contiendra la chaîne lorsque la fonction est retournée.
Valeur de retour
Pointeur vers la mémoire tampon contenant les données de texte. NULL
si la fin du fichier a été atteinte sans lire de données ; ou si booléen, FALSE
si la fin du fichier a été atteinte sans lire de données.
Notes
La lecture est arrêtée par le premier caractère de nouvelle ligne. Si, dans ce cas, moins nMax
de -1 caractères ont été lus, un caractère de nouvelle ligne est stocké dans la mémoire tampon. Un caractère Null ('\0'
) est ajouté dans les deux cas.
CFile::Read
est également disponible pour l’entrée en mode texte, mais elle ne se termine pas sur une paire de flux de retour chariot.
Remarque
La CString
version de cette fonction supprime le '\n'
cas échéant ; la version ne l’est LPTSTR
pas.
Exemple
CStdioFile f(stdin);
TCHAR buf[100];
f.ReadString(buf, 99);
CStdioFile::Seek
Repositionne le pointeur dans un fichier précédemment ouvert.
virtual ULONGLONG Seek(
LONGLONG lOff,
UINT nFrom);
Paramètres
lOff
Nombre d’octets pour déplacer le pointeur.
nFrom
Mode de déplacement du pointeur. Il doit s’agir de l’une des valeurs suivantes :
CFile::begin
: déplacez les octets du pointeurlOff
de fichier vers l’avant à partir du début du fichier.CFile::current
: Déplacez les octets du pointeurlOff
de fichier de la position actuelle dans le fichier.CFile::end
: déplacez les octets du pointeurlOff
de fichier à partir de la fin du fichier. Notez qu’illOff
doit être négatif pour rechercher dans le fichier existant ; les valeurs positives recherchent au-delà de la fin du fichier.
Valeur de retour
Si la position demandée est légale, Seek
retourne le nouveau décalage d’octets depuis le début du fichier. Sinon, la valeur de retour n’est pas définie et un CFileException
objet est levée.
Notes
La Seek
fonction autorise l’accès aléatoire au contenu d’un fichier en déplaçant le pointeur d’une quantité spécifiée, absolument ou relativement. Aucune donnée n’est réellement lue pendant la recherche. Si la position demandée est supérieure à la taille du fichier, la longueur du fichier est étendue à cette position et aucune exception n’est levée.
Lorsqu’un fichier est ouvert, le pointeur de fichier est positionné au décalage 0, au début du fichier.
Cette implémentation est basée sur la fonction fseek
Bibliothèque d’exécution Seek
(CRT). Il existe plusieurs limites sur l’utilisation des Seek
flux ouverts en mode texte. Pour plus d’informations, consultez fseek
, _fseeki64
.
Exemple
L’exemple suivant montre comment utiliser Seek
pour déplacer le pointeur 1000 octets à partir du début du cfile
fichier. Notez que Seek
les données ne sont pas lues. Vous devez donc appeler CStdioFile::ReadString
par la suite pour lire les données.
CStdioFile cfile(_T("Stdio_Seek_File.dat"), CFile::modeWrite |
CFile::modeCreate);
LONGLONG lOff = 1000;
ULONGLONG lActual = cfile.Seek(lOff, CFile::begin);
CStdioFile::WriteString
Écrit des données d’une mémoire tampon dans le fichier associé à l’objet CStdioFile
.
virtual void WriteString(LPCTSTR lpsz);
Paramètres
lpsz
Spécifie un pointeur vers une mémoire tampon qui contient une chaîne terminée par null.
Notes
Le caractère null de fin ( \0
) n’est pas écrit dans le fichier. Cette méthode écrit des caractères de ligne dans lpsz
le fichier sous la forme d’une paire de flux de retour chariot.
Si vous souhaitez écrire des données qui ne sont pas terminées par null dans un fichier, utilisez CStdioFile::Write
ou CFile::Write
.
Cette méthode lève une CInvalidArgException*
valeur si vous spécifiez NULL
le lpsz
paramètre.
Cette méthode lève une CFileException*
réponse aux erreurs du système de fichiers.
Exemple
CStdioFile f(stdout);
TCHAR buf[] = _T("test string");
f.WriteString(buf);
Voir aussi
CFile
Classe
Graphique hiérarchique
CFile
Classe
CFile::Duplicate
CFile::LockRange
CFile::UnlockRange
CNotSupportedException
Classe