Saya mencoba mencari cara untuk membaca / menulis ke properti file yang diperluas di C # misalnya Komentar, Bit Rate, Tanggal Diakses, Kategori dll yang dapat Anda lihat di Windows explorer. Ada ide bagaimana melakukan ini? EDIT: Saya terutama akan membaca / menulis ke file video (AVI / DIVX / ...)
c#
extended-properties
David Hayes
sumber
sumber
Jawaban:
Bagi mereka yang tidak tergila-gila dengan VB, ini dia di c #:
Catatan, Anda harus menambahkan referensi ke Microsoft Shell Controls and Automation dari tab COM pada dialog Referensi.
sumber
Ada artikel CodeProject untuk pembaca ID3. Dan utas di kixtart.org yang memiliki lebih banyak informasi untuk properti lainnya. Pada dasarnya, Anda perlu memanggil
GetDetailsOf()
metode pada objek shell folder untukshell32.dll
.sumber
Solusi 2016
Tambahkan paket NuGet berikut ke proyek Anda:
Microsoft.WindowsAPICodePack-Shell
oleh MicrosoftMicrosoft.WindowsAPICodePack-Core
oleh MicrosoftMembaca dan Menulis Properti
Penting:
File tersebut harus yang valid, dibuat oleh perangkat lunak tertentu yang ditugaskan. Setiap jenis file memiliki properti file tambahan tertentu dan tidak semuanya dapat ditulis.
Jika Anda mengklik kanan file di desktop dan tidak dapat mengedit properti, Anda juga tidak dapat mengeditnya dalam kode.
Contoh:
Author
atauTitle
propertinya.Jadi pastikan untuk menggunakan beberapa
try
catch
Topik Lebih Lanjut: MSDN: Menerapkan Penangan Properti
sumber
Contoh di VB.NET ini membaca semua properti yang diperluas:
Anda harus menambahkan referensi ke Microsoft Shell Controls and Automation dari tab COM pada dialog Referensi .
sumber
Terima kasih teman-teman untuk utas ini! Ini membantu saya ketika saya ingin mengetahui versi file exe. Namun, saya perlu mencari tahu bagian terakhir dari apa yang disebut Extended Properties.
Jika Anda membuka properti file exe (atau dll) di Windows Explorer, Anda mendapatkan tab Versi, dan tampilan Extended Properties dari file itu. Saya ingin mengakses salah satu nilai itu.
Solusi untuk ini adalah pengindeks properti FolderItem.ExtendedProperty dan jika Anda menghapus semua spasi di nama properti, Anda akan mendapatkan nilainya. Misalnya Versi File menjadi FileVersion, dan begitulah.
Semoga ini bisa membantu orang lain, saya pikir saya akan menambahkan info ini ke utas ini. Bersulang!
sumber
GetDetailsOf()
Metode - Mengambil detail tentang item di folder. Misalnya, ukuran, jenis, atau waktu modifikasi terakhirnya. Properti File mungkin berbeda berdasarkanWindows-OS
versinya.sumber
Folder rFolder = shell.NameSpace(_rootPath);
. FYI, saya menggunakan OS Windows 8.Menggunakan:
Akan bekerja pada versi Windows seperti Windows server 2008 di mana Anda akan mendapatkan kesalahan "Tidak dapat mentransmisikan objek COM jenis 'System .__ ComObject' ke tipe antarmuka 'Shell32.Shell'" jika hanya mencoba membuat Objek Shell32 secara normal.
sumber
shell
ke salah satuIShellDispatch
antarmuka (1-6) dan memanggil anggota secara langsung.Shell32.IShellDispatch ishell = (Shell32.IShellDispatch)shell; Shell32.Folder shellFolder = ishell.NameSpace(baseFolder);
Jawaban Jerker sedikit lebih sederhana. Berikut kode contoh yang bekerja dari MS :
Bagi mereka yang tidak dapat mereferensikan shell32 secara statis, Anda dapat memanggilnya secara dinamis seperti ini:
sumber
Saya tidak yakin jenis file apa yang Anda coba tulis propertinya tetapi taglib-sharp adalah pustaka penandaan sumber terbuka yang sangat baik yang membungkus semua fungsi ini dengan baik. Ini memiliki banyak dukungan bawaan untuk sebagian besar jenis file media populer tetapi juga memungkinkan Anda untuk melakukan penandaan lebih lanjut dengan hampir semua file.
EDIT: Saya telah memperbarui tautan ke taglib sharp. Tautan lama tidak lagi berfungsi.
EDIT: Memperbarui tautan sekali lagi per komentar kzu.
sumber
Berikut adalah solusi untuk membaca - bukan menulis - properti yang diperluas berdasarkan apa yang saya temukan di halaman ini dan dengan bantuan objek shell32 .
Untuk memperjelas ini adalah retasan. Sepertinya kode ini masih akan berjalan di Windows 10 tetapi akan mengenai beberapa properti kosong. Versi Windows sebelumnya harus menggunakan:
Di Windows 10 kami berasumsi bahwa ada sekitar 320 properti untuk dibaca dan cukup lewati entri kosong:
Seperti yang disebutkan, Anda perlu merujuk pada perakitan Com Interop.Shell32.
Jika Anda mendapatkan pengecualian terkait STA, Anda akan menemukan solusinya di sini:
Pengecualian saat menggunakan Shell32 untuk mendapatkan properti file diperpanjang
Saya tidak tahu seperti apa nama properti itu pada sistem asing dan tidak dapat menemukan informasi tentang konstanta yang dapat dilokalkan yang akan digunakan untuk mengakses kamus. Saya juga menemukan bahwa tidak semua properti dari dialog Properti yang ada di kamus dikembalikan.
BTW ini sangat lambat dan - setidaknya pada Windows 10 - penguraian tanggal dalam string yang diambil akan menjadi tantangan sehingga menggunakan ini tampaknya ide yang buruk untuk memulai.
Pada Windows 10 Anda pasti harus menggunakan pustaka Windows.Storage yang berisi SystemPhotoProperties, SystemMusicProperties, dll. Https://docs.microsoft.com/en-us/windows/uwp/files/quickstart-getting-file-properties
Dan akhirnya, saya memposting solusi yang jauh lebih baik yang menggunakan WindowsAPICodePack di sana
sumber