Kelas CMemFile
Kelas turunan CFile yang mendukung file memori.
Sintaks
class CMemFile : public CFile
Anggota
Konstruktor Publik
Nama | Deskripsi |
---|---|
CMemFile::CMemFile | Membuat objek file memori. |
Metode Publik
Nama | Deskripsi |
---|---|
CMemFile::Lampirkan | Melampirkan blok memori ke CMemFile . |
CMemFile::D etach | Melepaskan blok memori dari CMemFile dan mengembalikan penunjuk ke blok memori yang dilepaskan. |
CMemFile::GetBufferPtr | Dapatkan atau tulis ke buffer memori yang mendukung file memori. |
Metode yang Dilindungi
Nama | Deskripsi |
---|---|
CMemFile::Alloc | Ambil alih untuk mengubah perilaku alokasi memori. |
CMemFile::Free | Ambil alih untuk mengubah perilaku alokasi memori. |
CMemFile::GrowFile | Ambil alih untuk mengubah perilaku saat menumbuhkan file. |
CMemFile::Memcpy | Ambil alih untuk mengubah perilaku penyalinan memori saat membaca dan menulis file. |
CMemFile::Realloc | Ambil alih untuk mengubah perilaku realokasi memori. |
Keterangan
File memori ini berulah seperti file disk kecuali file disimpan dalam RAM daripada pada disk. File memori berguna untuk:
- penyimpanan sementara cepat
- mentransfer byte mentah antara proses independen
- mentransfer objek berseri antara proses independen
CMemFile
objek dapat secara otomatis mengalokasikan memori mereka sendiri. Atau, Anda dapat melampirkan blok memori Anda sendiri ke CMemFile
objek dengan memanggil Lampirkan. Dalam kedua kasus, memori untuk menumbuhkan file memori secara otomatis dialokasikan dalam nGrowBytes
kenaikan berukuran -jika nGrowBytes
bukan nol.
Blok memori akan secara otomatis dihapus setelah penghancuran CMemFile
objek jika memori awalnya dialokasikan oleh CMemFile
objek; jika tidak, Anda bertanggung jawab untuk membatalkan alokasi memori yang Anda lampirkan ke objek.
Anda dapat mengakses blok memori melalui pointer yang disediakan saat Anda melepaskannya dari CMemFile
objek dengan memanggil Lepaskan.
Penggunaan CMemFile
yang paling umum adalah membuat CMemFile
objek dan menggunakannya dengan memanggil fungsi anggota CFile . Membuat CMemFile
secara otomatis membukanya: Anda tidak memanggil CFile::Open, yang hanya digunakan untuk file disk. Karena CMemFile
tidak menggunakan file disk, anggota CFile::m_hFile
data tidak digunakan.
Fungsi CFile
anggota Duplikat, LockRange, dan UnlockRange tidak diimplementasikan untuk CMemFile
. Jika Anda memanggil fungsi-fungsi ini pada CMemFile
objek, Anda akan mendapatkan CNotSupportedException.
CMemFile
menggunakan fungsi pustaka run-time malloc, realloc, dan bebas untuk mengalokasikan, merealokasi, dan membatalkan alokasi memori; dan memcpy intrinsik untuk memblokir memori salin saat membaca dan menulis. Jika Anda ingin mengubah perilaku ini atau perilaku saat CMemFile
menumbuhkan file, dapatkan kelas Anda sendiri dari CMemFile
dan ambil alih fungsi yang sesuai.
Untuk informasi selengkapnya tentang CMemFile
, lihat artikel File di MFC dan Manajemen Memori (MFC) dan lihat Penanganan File di Referensi Pustaka Run-Time.
Hierarki Warisan
CMemFile
Persyaratan
Header: afx.h
CMemFile::Alloc
Fungsi ini dipanggil oleh CMemFile
fungsi anggota.
virtual BYTE* Alloc(SIZE_T nBytes);
Parameter
nByte
Jumlah byte memori yang akan dialokasikan.
Tampilkan Nilai
Penunjuk ke blok memori yang dialokasikan, atau NULL jika alokasi gagal.
Keterangan
Ambil alih fungsi ini untuk mengimplementasikan alokasi memori kustom. Jika Anda mengambil alih fungsi ini, Anda mungkin juga ingin mengambil alih Free dan Realloc .
Implementasi default menggunakan fungsi pustaka run-time malloc untuk mengalokasikan memori.
CMemFile::Lampirkan
Panggil fungsi ini untuk melampirkan blok memori ke CMemFile
.
void Attach(
BYTE* lpBuffer,
UINT nBufferSize,
UINT nGrowBytes = 0);
Parameter
lpBuffer
Penunjuk ke buffer untuk dilampirkan ke CMemFile
.
nBufferSize
Bilangan bulat yang menentukan ukuran buffer dalam byte.
nGrowBytes
Kenaikan alokasi memori dalam byte.
Keterangan
Hal ini menyebabkan CMemFile
penggunaan blok memori sebagai file memori.
Jika nGrowBytes adalah 0, CMemFile
akan mengatur panjang file ke nBufferSize. Ini berarti bahwa data dalam blok memori sebelum dilampirkan CMemFile
akan digunakan sebagai file. File memori yang dibuat dengan cara ini tidak dapat ditumbuhkan.
Karena file tidak dapat ditumbuhkan, berhati-hatilah untuk tidak menyebabkan CMemFile
upaya untuk menumbuhkan file. Misalnya, jangan panggil CMemFile
penimpaan CFile:Write untuk menulis melewati akhir atau jangan panggil CFile:SetLength dengan panjang lebih panjang dari nBufferSize.
Jika nGrowBytes lebih besar dari 0, CMemFile
akan mengabaikan konten blok memori yang telah Anda lampirkan. Anda harus menulis konten file memori dari awal menggunakan CMemFile
penimpaan CFile::Write
. Jika Anda mencoba menulis melewati akhir file atau menumbuhkan file dengan memanggil CMemFile
penimpaan CFile::SetLength
, CMemFile
akan menumbuhkan alokasi memori dalam kenaikan nGrowBytes. Menumbuhkan alokasi memori akan gagal jika blok memori yang Anda lewati Attach
tidak dialokasikan dengan metode yang kompatibel dengan Alokasi. Agar kompatibel dengan implementasi Alloc
default , Anda harus mengalokasikan memori dengan fungsi pustaka run-time malloc atau calloc.
CMemFile::CMemFile
Kelebihan beban pertama membuka file memori kosong.
CMemFile(UINT nGrowBytes = 1024);
CMemFile(
BYTE* lpBuffer,
UINT nBufferSize,
UINT nGrowBytes = 0);
Parameter
nGrowBytes
Kenaikan alokasi memori dalam byte.
lpBuffer Pointer ke buffer yang menerima informasi ukuran nBufferSize.
nBufferSize
Bilangan bulat yang menentukan ukuran buffer file, dalam byte.
Keterangan
File dibuka oleh konstruktor. Jangan panggil CFile::Open.
Kelebihan beban kedua bertindak sama seperti jika Anda menggunakan konstruktor pertama dan segera disebut Lampirkan dengan parameter yang sama. Lihat Attach
untuk detailnya.
Contoh
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
Panggil fungsi ini untuk mendapatkan penunjuk ke blok memori yang digunakan oleh CMemFile
.
BYTE* Detach();
Tampilkan Nilai
Penunjuk ke blok memori yang berisi konten file memori.
Keterangan
Memanggil fungsi ini juga menutup CMemFile
. Anda dapat memasang kembali blok memori dengan CMemFile
memanggil Lampirkan. Jika Anda ingin memasang kembali file dan menggunakan data di dalamnya, Anda harus memanggil CFile::GetLength untuk mendapatkan panjang file sebelum memanggil Detach
. Jika Anda melampirkan blok memori ke CMemFile
sehingga Anda dapat menggunakan datanya ( nGrowBytes
== 0), maka Anda tidak dapat menumbuhkan file memori.
CMemFile::Free
Fungsi ini dipanggil oleh CMemFile
fungsi anggota.
virtual void Free(BYTE* lpMem);
Parameter
lpMem
Arahkan ke memori yang akan dibatalkan alokasinya.
Keterangan
Ambil alih fungsi ini untuk mengimplementasikan alokasi memori kustom. Jika Anda mengambil alih fungsi ini, Anda mungkin juga ingin mengambil alih Alloc dan Realloc .
CMemFile::GetBufferPtr
Dapatkan atau tulis ke buffer memori yang mendukung file memori.
virtual UINT GetBufferPtr(
UINT nCommand,
UINT nCount = 0,
void** ppBufStart = NULL,
void** ppBufMax = NULL
);
Parameter
nCommand
BufferCommand untuk melakukan (bufferCheck
, , bufferCommit
bufferRead
, atau bufferWrite
).
nCount
Bergantung pada nCommand, jumlah byte dalam buffer untuk dibaca, ditulis, atau dikomit. Saat membaca dari buffer, tentukan -1 untuk mengembalikan buffer dari posisi saat ini ke akhir file.
ppBufStart
[out] Awal buffer. Harus ketika NULL
nCommand adalah bufferCommit
.
ppBufMax
[out] Akhir buffer. Harus ketika NULL
nCommand adalah bufferCommit
.
Tampilkan Nilai
nilai perintah | Nilai hasil |
---|---|
buffercheck |
Mengembalikan bufferDirect jika buffering langsung didukung, jika tidak, 0. |
bufferCommit |
Mengembalikan 0 |
bufferRead atau bufferWrite |
Mengembalikan jumlah byte dalam spasi buffer yang dikembalikan. ppBufStart dan ppBufMax menunjuk ke awal dan akhir buffer baca/tulis. |
Keterangan
Posisi saat ini dalam buffer memori (m_nPosition
) dimajukan dengan cara berikut, tergantung pada nCommand:
nCommand | posisi buffer |
---|---|
bufferCommit |
Posisi saat ini maju dengan ukuran buffer yang diterapkan. |
bufferRead |
Posisi saat ini maju dengan ukuran buffer baca. |
CMemFile::GrowFile
Fungsi ini dipanggil oleh beberapa CMemFile
fungsi anggota.
virtual void GrowFile(SIZE_T dwNewLen);
Parameter
dwNewLen
Ukuran baru file memori.
Keterangan
Anda dapat mengambil alihnya jika Anda ingin mengubah seberapa CMemFile
besar filenya. Implementasi default memanggil Realloc untuk menumbuhkan blok yang ada (atau Alokasikan untuk membuat blok memori), mengalokasikan memori dalam kelipatan nGrowBytes
nilai yang ditentukan dalam konstruktor atau Lampirkan panggilan.
CMemFile::Memcpy
Fungsi ini dipanggil oleh CMemFile
penimpaan CFile::Read dan CFile::Write untuk mentransfer data ke dan dari file memori.
virtual BYTE* Memcpy(
BYTE* lpMemTarget,
const BYTE* lpMemSource,
SIZE_T nBytes);
Parameter
lpMemTarget
Penunjuk ke blok memori tempat memori sumber akan disalin.
lpMemSource
Penunjuk ke blok memori sumber.
nByte
Jumlah byte yang akan disalin.
Tampilkan Nilai
Salinan lpMemTarget.
Keterangan
Ambil alih fungsi ini jika Anda ingin mengubah cara menyalin CMemFile
memori ini.
CMemFile::Realloc
Fungsi ini dipanggil oleh CMemFile
fungsi anggota.
virtual BYTE* Realloc(
BYTE* lpMem,
SIZE_T nBytes);
Parameter
lpMem
Penunjuk ke blok memori yang akan dialokasikan.
nByte
Ukuran baru untuk blok memori.
Tampilkan Nilai
Penunjuk ke blok memori yang direalokasikan (dan mungkin dipindahkan), atau NULL jika realokasi gagal.
Keterangan
Ambil alih fungsi ini untuk mengimplementasikan realokasi memori kustom. Jika Anda mengambil alih fungsi ini, Anda mungkin juga ingin mengambil alih Alokasi dan Gratis .