Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Classe dérivée de CFile qui prend en charge les fichiers mémoire.
Syntaxe
class CMemFile : public CFile
Membres
Constructeurs publics
| Nom | Descriptif |
|---|---|
| CMemFile ::CMemFile | Construit un objet de fichier mémoire. |
Méthodes publiques
| Nom | Descriptif |
|---|---|
| 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 | Descriptif |
|---|---|
| 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
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, CFile::SetLengthCMemFileaugmente 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 .