Implementasi File IStorage-Compound

Implementasi file campuran IStorage memungkinkan Anda untuk membuat dan mengelola substorase dan aliran dalam objek penyimpanan yang berada di objek file campuran. Untuk membuat objek file gabungan dan mendapatkan penunjuk IStorage , panggil fungsi API StgCreateStorageEx. Untuk membuka objek file campuran yang ada dan mendapatkan penunjuk IStorage akarnya, panggil StgOpenStorageEx.

Aplikasi yang menggunakan penyimpanan campuran harus terdaftar di HKEY_CLASSES_ROOT\SystemFileAssociations dan harus menyediakan penangan properti mereka sendiri. Untuk informasi selengkapnya, lihat bagian "Mendaftarkan Kata Kerja dan Informasi Asosiasi File Lainnya" dari Pendaftaran Aplikasi.

Kapan Digunakan

Sebagian besar aplikasi menggunakan implementasi ini untuk membuat dan mengelola penyimpanan dan aliran.

Metode

IStorage::CreateStream

Membuat dan membuka objek stream dengan nama yang ditentukan yang terkandung dalam objek penyimpanan ini. Panjang nama tidak boleh melebihi 31 karakter (tidak termasuk terminator string). Karakter 000 hingga 01f, berfungsi sebagai karakter pertama dari nama aliran/penyimpanan, dicadangkan untuk digunakan oleh OLE. Ini adalah pembatasan file gabungan, bukan pembatasan penyimpanan terstruktur. Implementasi file campuran yang disediakan COM dari metode IStorage::CreateStream tidak mendukung perilaku berikut:

  • Bendera STGM_DELETEONRELEASE tidak didukung.
  • Mode yang ditransaksikan (STGM_TRANSACTED) tidak didukung untuk objek stream.
  • Membuka aliran yang sama lebih dari sekali dari penyimpanan yang sama tidak didukung. Bendera mode berbagi STGM_SHARE_EXCLUSIVE harus ditentukan dalam parameter grfMode .

IStorage::OpenStream

Membuka objek stream yang ada dalam objek penyimpanan ini menggunakan mode akses yang ditentukan dalam parameter grfMode . Karakter 000 hingga 01f, berfungsi sebagai karakter pertama dari nama aliran/penyimpanan, dicadangkan untuk digunakan oleh OLE. Ini adalah pembatasan file gabungan, bukan pembatasan penyimpanan terstruktur. Implementasi file campuran yang disediakan COM dari metode IStorage::OpenStream tidak mendukung perilaku berikut:

  • Bendera STGM_DELETEONRELEASE.
  • Mode yang ditransaksikan (STGM_TRANSACTED) untuk objek stream.
  • Membuka aliran yang sama lebih dari sekali dari penyimpanan yang sama. Bendera STGM_SHARE_EXCLUSIVE harus ditentukan.

IStorage::CreateStorage

Membuat dan membuka objek penyimpanan baru dengan nama yang ditentukan dalam mode akses yang ditentukan. Panjang nama tidak boleh melebihi 31 karakter (tidak termasuk terminator string). Karakter 000 hingga 01f, berfungsi sebagai karakter pertama dari nama aliran/penyimpanan, dicadangkan untuk digunakan oleh OLE. Ini adalah pembatasan file gabungan, bukan pembatasan penyimpanan terstruktur. Implementasi file campuran yang disediakan COM dari metode IStorage::CreateStorage tidak mendukung perilaku berikut:

  • Bendera STGM_PRIORITY untuk penyimpanan nonroot.
  • Membuka objek penyimpanan yang sama lebih dari sekali dari penyimpanan induk yang sama. Bendera STGM_SHARE_EXCLUSIVE harus ditentukan.
  • Bendera STGM_DELETEONRELEASE. Jika bendera ini ditentukan, fungsi akan mengembalikan STG_E_INVALIDFLAG.

IStorage::OpenStorage

Membuka objek penyimpanan yang ada dengan nama yang ditentukan dalam mode akses yang ditentukan. Karakter 000 hingga 01f, berfungsi sebagai karakter pertama dari nama aliran/penyimpanan, dicadangkan untuk digunakan oleh OLE. Ini adalah pembatasan file gabungan, bukan pembatasan penyimpanan terstruktur. Implementasi file campuran yang disediakan COM dari metode IStorage::OpenStorage tidak mendukung perilaku berikut:

  • Bendera STGM_PRIORITY untuk penyimpanan nonroot.
  • Membuka objek penyimpanan yang sama lebih dari sekali dari penyimpanan induk yang sama. Bendera STGM_SHARE_EXCLUSIVE harus ditentukan.
  • Bendera STGM_DELETEONRELEASE. Jika bendera ini ditentukan, fungsi akan mengembalikan STG_E_INVALIDFUNCTION.

IStorage::CopyTo

Menyalin hanya substorase dan aliran objek penyimpanan terbuka ini ke objek penyimpanan lain. Parameter rgiidExclude dapat diatur ke IID_IStream untuk menyalin hanya substorage, atau untuk IID_IStorage hanya menyalin aliran.

IStorage::MoveElementTo

Menyalin atau memindahkan substorase atau aliran dari objek penyimpanan ini ke objek penyimpanan lain.

IStorage::Commit

Memastikan bahwa setiap perubahan yang dilakukan pada objek penyimpanan terbuka dalam mode yang ditransaksikan tercermin dalam penyimpanan induk; untuk penyimpanan akar, mencerminkan perubahan pada perangkat aktual; misalnya, file pada disk. Untuk objek penyimpanan akar yang dibuka dalam mode langsung, metode ini tidak berpengaruh kecuali untuk membersihkan semua buffer memori ke disk. Untuk objek penyimpanan nonroot dalam mode langsung, metode ini tidak berpengaruh.

Implementasi file campuran yang disediakan COM menggunakan proses penerapan dua fase kecuali STGC_OVERWRITE ditentukan dalam parameter grfCommitFlags . Proses dua fase ini memastikan ketahanan data, jika operasi penerapan gagal. Pertama, semua data baru ditulis ke ruang yang tidak digunakan dalam file yang mendasar. Jika perlu, ruang baru dialokasikan ke file. Setelah langkah ini selesai, tabel dalam file diperbarui menggunakan operasi penulisan sektor tunggal untuk menunjukkan bahwa data baru akan digunakan sebagai pengganti yang lama. Data lama menjadi ruang kosong untuk digunakan pada operasi penerapan berikutnya. Dengan demikian, data lama tersedia dan dapat dipulihkan jika terjadi kesalahan saat melakukan perubahan. Jika STGC_OVERWRITE ditentukan, operasi penerapan fase tunggal akan digunakan. Untuk informasi selengkapnya tentang bendera mode yang ditransaksikan, lihat enumerasi STGC .

IStorage::Revert

Membuang semua perubahan yang telah dilakukan pada objek penyimpanan sejak operasi penerapan terakhir.

IStorage::EnumElements

Membuat dan mengambil penunjuk ke objek enumerator yang dapat digunakan untuk menghitung objek penyimpanan dan aliran yang terkandung dalam objek penyimpanan ini. Implementasi file campuran yang disediakan COM mengambil rekam jepret dari informasi tersebut. Oleh karena itu, perubahan pada aliran dan penyimpanan tidak tercermin dalam enumerator sampai enumerator baru diperoleh.

IStorage::D estroyElement

Menghapus elemen yang ditentukan (substorase atau aliran) dari objek penyimpanan ini.

IStorage::RenameElement

Mengganti nama substorase atau aliran yang ditentukan dalam objek penyimpanan ini. Karakter 000 hingga 01f, berfungsi sebagai karakter pertama dari nama aliran/penyimpanan, dicadangkan untuk digunakan oleh OLE. Ini adalah pembatasan file gabungan, bukan pembatasan penyimpanan terstruktur.

IStorage::SetElementTimes

Mengatur waktu modifikasi, akses, dan pembuatan elemen penyimpanan yang ditentukan. Implementasi file campuran yang disediakan COM mempertahankan waktu modifikasi dan perubahan untuk objek penyimpanan internal. Objek penyimpanan akar mendukung apa pun yang didukung oleh sistem file yang mendasar (atau oleh ILockBytes). Implementasi file gabungan tidak mempertahankan stempel waktu untuk aliran internal. Stempel waktu yang tidak didukung dilaporkan sebagai nol, yang memungkinkan penelepon untuk menguji dukungan.

IStorage::SetClass

Menetapkan CLSID yang ditentukan ke objek penyimpanan ini.

IStorage::SetStateBits

Menyimpan hingga 32 bit informasi status dalam objek penyimpanan ini. Status yang ditetapkan oleh metode ini hanya untuk penggunaan eksternal. Implementasi file campuran yang disediakan COM tidak melakukan tindakan apa pun berdasarkan status.

IStorage::Stat

Mengambil struktur STATSTG untuk objek penyimpanan terbuka ini.

Keterangan

Jika objek penyimpanan dibuka dalam mode sederhana, penggunaan metode di atas dibatasi. Penyimpanan dalam mode sederhana jika dibuka dengan elemen STGM_SIMPLE yang ditentukan dalam parameter grfMode dari fungsi StgCreateStorageEx atau StgOpenStorageEx . Untuk informasi selengkapnya tentang penyimpanan mode sederhana, lihat Konstanta STGM. Jika objek penyimpanan mode sederhana diperoleh dari fungsi StgCreateStorageEx , maka metode CreateStream dapat dipanggil tetapi metode OpenStream tidak dapat. Jika objek penyimpanan mode sederhana diperoleh dari fungsi StgOpenStorageEx , maka metode OpenStream dapat dipanggil tetapi metode CreateStream tidak dapat.

Ketika objek penyimpanan mode sederhana digunakan untuk membuat aliran, ukuran minimum aliran tersebut biasanya adalah 4096 byte. Jika lebih sedikit data ditulis ke aliran, ukurannya dibulatkan hingga 4096 byte.

Batas Implementasi File Campuran

IFillLockBytes

ILockBytes

IRootStorage

IStorage

IStream

StgCreateDocfile

StgCreateStorageEx

StgOpenStorage

StgOpenStorageEx