Bagikan melalui


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 nGrowByteskenaikan 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.

CMemFilemenggunakan 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

CObject

CFile

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 Allocdefault , 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, , bufferCommitbufferRead, 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 .

Lihat juga

Kelas CFile
Bagan Hierarki