Share via


CMemFile, classe

Classe dérivée de CFile qui prend en charge les fichiers mémoire.

Syntaxe

class CMemFile : public CFile

Membres

Constructeurs publics

Nom Description
CMemFile ::CMemFile Construit un objet de fichier mémoire.

Méthodes publiques

Nom Description
CMemFile ::Attach Attache un bloc de mémoire à CMemFile.
CMemFile ::D etach Détache le bloc de mémoire et CMemFile retourne un pointeur vers le bloc de mémoire détaché.
CMemFile ::GetBufferPtr Obtenez ou écrivez dans la mémoire tampon qui sauvegarde un fichier mémoire.

Méthodes protégées

Nom Description
CMemFile ::Alloc Remplacez la modification du comportement d’allocation de mémoire.
CMemFile ::Free Remplacez la modification du comportement de désallocation de mémoire.
CMemFile ::GrowFile Remplacez le comportement lors de la croissance d’un fichier.
CMemFile ::Memcpy Remplacez la modification du comportement de copie de mémoire lors de la lecture et de l’écriture de fichiers.
CMemFile ::Realloc Remplacez la modification du comportement de réaffectation de la mémoire.

Notes

Ces fichiers mémoire se comportent comme des fichiers de disque, sauf que le fichier est stocké dans la RAM plutôt que sur le disque. Un fichier mémoire est utile pour :

  • stockage temporaire rapide
  • transfert d’octets bruts entre des processus indépendants
  • transfert d’objets sérialisés entre des processus indépendants

CMemFile les objets peuvent allouer automatiquement leur propre mémoire. Vous pouvez également attacher votre propre bloc de mémoire à l’objet CMemFile en appelant Attach. Dans les deux cas, la mémoire de croissance du fichier de mémoire est automatiquement allouée par nGrowBytesincréments dimensionnés si nGrowBytes ce n’est pas zéro.

Le bloc de mémoire est automatiquement supprimé lors de la destruction de l’objet CMemFile si la mémoire a été initialement allouée par l’objet CMemFile ; sinon, vous êtes responsable de l’allocation de la mémoire que vous avez attachée à l’objet.

Vous pouvez accéder au bloc de mémoire via le pointeur fourni lorsque vous le détachez de l’objet CMemFile en appelant Detach.

L’utilisation la plus courante consiste CMemFile à créer un CMemFile objet et à l’utiliser en appelant des fonctions membres CFile . La création d’un CMemFile fichier s’ouvre automatiquement : vous n’appelez pas CFile ::Open, qui est utilisé uniquement pour les fichiers de disque. Comme CMemFile n’utilise pas de fichier de disque, le membre CFile::m_hFile de données n’est pas utilisé.

Les CFile fonctions membres Dupliquer, LockRange et UnlockRange ne sont pas implémentées pour CMemFile. Si vous appelez ces fonctions sur un CMemFile objet, vous obtenez une exception CNotSupportedException.

CMemFileutilise les fonctions de bibliothèque d’exécution malloc, realloc et gratuites pour allouer, réallouer et libérer de la mémoire ; et le memcpy intrinsèque pour bloquer la mémoire de copie lors de la lecture et de l’écriture. Si vous souhaitez modifier ce comportement ou le comportement lorsque CMemFile vous développez un fichier, dérivez votre propre classe et CMemFile remplacez les fonctions appropriées.

Pour plus d’informations sur CMemFile, consultez les articles Fichiers dans MFC et Gestion de la mémoire (MFC) et consultez Gestion des fichiers dans la référence de la bibliothèque d’exécution.

Hiérarchie d'héritage

CObject

CFile

CMemFile

Spécifications

En-tête : afx.h

CMemFile ::Alloc

Cette fonction est appelée par CMemFile les fonctions membres.

virtual BYTE* Alloc(SIZE_T nBytes);

Paramètres

octets
Nombre d’octets de mémoire à allouer.

Valeur de retour

Pointeur vers le bloc de mémoire alloué ou NULL si l’allocation a échoué.

Notes

Remplacez cette fonction pour implémenter l’allocation de mémoire personnalisée. Si vous remplacez cette fonction, vous voudrez probablement remplacer Free et Realloc .

L’implémentation par défaut utilise la fonction de bibliothèque d’exécution malloc pour allouer de la mémoire.

CMemFile ::Attach

Appelez cette fonction pour attacher un bloc de mémoire à CMemFile.

void Attach(
    BYTE* lpBuffer,
    UINT nBufferSize,
    UINT nGrowBytes = 0);

Paramètres

lpBuffer
Pointeur vers la mémoire tampon à attacher à CMemFile.

nBufferSize
Entier qui spécifie la taille de la mémoire tampon en octets.

nGrowBytes
Incrément d’allocation de mémoire en octets.

Notes

Cela entraîne CMemFile l’utilisation du bloc de mémoire comme fichier mémoire.

Si nGrowBytes est 0, CMemFile définissez la longueur du fichier sur nBufferSize. Cela signifie que les données du bloc de mémoire avant qu’elles ne soient jointes CMemFile seront utilisées comme fichier. Les fichiers mémoire créés de cette façon ne peuvent pas être développés.

Étant donné que le fichier ne peut pas être développé, veillez à ne pas provoquer CMemFile de tentative de croissance du fichier. Par exemple, n’appelez pas les CMemFile remplacements de CFile :Write pour écrire au-delà de la fin ou n’appelez pas CFile :SetLength avec une longueur supérieure à nBufferSize.

Si nGrowBytes est supérieur à 0, CMemFile ignore le contenu du bloc de mémoire que vous avez attaché. Vous devrez écrire le contenu du fichier mémoire à partir de zéro à l’aide du CMemFile remplacement de CFile::Write. Si vous tentez d’écrire au-delà de la fin du fichier ou que vous augmentez le fichier en appelant le CMemFile remplacement, CMemFileCFile::SetLengthaugmente l’allocation de mémoire par incréments de nGrowBytes. L’augmentation de l’allocation de mémoire échoue si le bloc de mémoire que vous passez n’a Attach pas été alloué avec une méthode compatible avec Alloc. Pour être compatible avec l’implémentation par défaut de Alloc, vous devez allouer la mémoire avec la fonction de bibliothèque d’exécution malloc ou calloc.

CMemFile ::CMemFile

La première surcharge ouvre un fichier mémoire vide.

CMemFile(UINT nGrowBytes = 1024);

CMemFile(
    BYTE* lpBuffer,
    UINT nBufferSize,
    UINT nGrowBytes = 0);

Paramètres

nGrowBytes
Incrément d’allocation de mémoire en octets.

lpBuffer Pointeur vers une mémoire tampon qui reçoit des informations de la taille nBufferSize.

nBufferSize
Entier qui spécifie la taille de la mémoire tampon de fichier, en octets.

Notes

Le fichier est ouvert par le constructeur. N’appelez pas CFile ::Open.

La deuxième surcharge agit de la même façon que si vous avez utilisé le premier constructeur et immédiatement appelé Attacher avec les mêmes paramètres. Pour plus d'informations, consultez Attach.

Exemple

CMemFile f; // Ready to use - no Open necessary.

BYTE * pBuf = (BYTE *)new char [1024];
CMemFile g(pBuf, 1024, 256);
// same as CMemFile g; g.Attach(pBuf, 1024, 256);

CMemFile ::D etach

Appelez cette fonction pour obtenir un pointeur vers le bloc de mémoire utilisé par CMemFile.

BYTE* Detach();

Valeur de retour

Pointeur vers le bloc de mémoire qui contient le contenu du fichier mémoire.

Notes

L’appel de cette fonction ferme également le CMemFile. Vous pouvez rattacher le bloc de mémoire en CMemFile appelant Attach. Si vous souhaitez rattacher le fichier et utiliser les données dans celui-ci, vous devez appeler CFile ::GetLength pour obtenir la longueur du fichier avant d’appeler Detach. Si vous attachez un bloc de mémoire pour CMemFile que vous puissiez utiliser ses données ( nGrowBytes == 0), vous ne pouvez pas développer le fichier de mémoire.

CMemFile ::Free

Cette fonction est appelée par CMemFile les fonctions membres.

virtual void Free(BYTE* lpMem);

Paramètres

lpMem
Pointeur vers la mémoire à libérer.

Notes

Remplacez cette fonction pour implémenter une désallocation de mémoire personnalisée. Si vous remplacez cette fonction, vous voudrez probablement remplacer Alloc et Realloc .

CMemFile ::GetBufferPtr

Obtenez ou écrivez dans la mémoire tampon qui sauvegarde un fichier mémoire.

virtual UINT GetBufferPtr(
    UINT nCommand,
    UINT nCount = 0,
    void** ppBufStart = NULL,
    void** ppBufMax = NULL
);

Paramètres

nCommand
BufferCommand à effectuer (bufferCheck, bufferCommit, bufferReadou bufferWrite ).

nCount
Selon nCommand, nombre d’octets dans la mémoire tampon à lire, écrire ou valider. Lors de la lecture à partir de la mémoire tampon, spécifiez -1 pour renvoyer une mémoire tampon de la position actuelle à la fin du fichier.

ppBufStart
[out] Début de la mémoire tampon. Doit être NULL quand nCommand est bufferCommit.

ppBufMax
[out] Fin de la mémoire tampon. Doit être NULL quand nCommand est bufferCommit.

Valeur de retour

valeur de commande Valeur retournée
buffercheck Retourne bufferDirect si la mise en mémoire tampon directe est prise en charge, sinon 0.
bufferCommit Retourne 0.
bufferRead ou bufferWrite Retourne le nombre d’octets dans l’espace tampon retourné. ppBufStart et ppBufMax pointent vers le début et la fin de la mémoire tampon en lecture/écriture.

Notes

La position actuelle dans la mémoire tampon (m_nPosition) est avancée de la manière suivante, selon nCommand :

nCommand Position de la mémoire tampon
bufferCommit La position actuelle avance par la taille de la mémoire tampon validée.
bufferRead La position actuelle avance par la taille de la mémoire tampon de lecture.

CMemFile ::GrowFile

Cette fonction est appelée par plusieurs des CMemFile fonctions membres.

virtual void GrowFile(SIZE_T dwNewLen);

Paramètres

dwNewLen
Nouvelle taille du fichier mémoire.

Notes

Vous pouvez la remplacer si vous souhaitez modifier la taille CMemFile de son fichier. L’implémentation par défaut appelle Realloc pour développer un bloc existant (ou Alloc pour créer un bloc de mémoire), allouer de la mémoire dans plusieurs de la nGrowBytes valeur spécifiée dans le constructeur ou l’appel Attach .

CMemFile ::Memcpy

Cette fonction est appelée par les CMemFile remplacements de CFile ::Read et CFile ::Write pour transférer des données vers et depuis le fichier mémoire.

virtual BYTE* Memcpy(
    BYTE* lpMemTarget,
    const BYTE* lpMemSource,
    SIZE_T nBytes);

Paramètres

lpMemTarget
Pointeur vers le bloc de mémoire dans lequel la mémoire source sera copiée.

lpMemSource
Pointeur vers le bloc de mémoire source.

octets
Nombre d'octets à copier.

Valeur de retour

Copie de lpMemTarget.

Notes

Remplacez cette fonction si vous souhaitez modifier la façon dont CMemFile ces copies mémoire sont effectuées.

CMemFile ::Realloc

Cette fonction est appelée par CMemFile les fonctions membres.

virtual BYTE* Realloc(
    BYTE* lpMem,
    SIZE_T nBytes);

Paramètres

lpMem
Pointeur vers le bloc de mémoire à réallouer.

octets
Nouvelle taille pour le bloc de mémoire.

Valeur de retour

Pointeur vers le bloc de mémoire qui a été réaffecté (et éventuellement déplacé) ou NULL si la réaffectation a échoué.

Notes

Remplacez cette fonction pour implémenter une réaffectation de mémoire personnalisée. Si vous remplacez cette fonction, vous souhaiterez probablement également remplacer Alloc et Free .

Voir aussi

CFile, classe
Graphique hiérarchique