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 nGrowBytes
incré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.
CMemFile
utilise 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
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, CMemFile
CFile::SetLength
augmente 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
, bufferRead
ou 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 .