La classe CStdioFile

Représente un fichier de flux d’exécution C tel qu’ouvert par la fonction fopend’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, LockRangeet 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

CObject

CFile

CStdioFile

Spécifications

En-têteafx.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 fopend’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 stdinde fichier d’entrée/sortie prédéfinis, stdoutou 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 pOpenStreamlpszFileName, 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 fopend’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 nMaxde -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 pointeur lOff de fichier vers l’avant à partir du début du fichier.

  • CFile::current: Déplacez les octets du pointeur lOff de fichier de la position actuelle dans le fichier.

  • CFile::end: déplacez les octets du pointeur lOff de fichier à partir de la fin du fichier. Notez qu’il lOff 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 fseekBibliothè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