Estoy tratando de averiguar cómo leer / escribir en las propiedades extendidas del archivo en C #, por ejemplo, comentario, velocidad de bits, fecha de acceso, categoría, etc. que puede ver en el explorador de Windows. ¿Alguna idea de como hacer esto? EDITAR: principalmente leeré / escribiré en archivos de video (AVI / DIVX / ...)
c#
extended-properties
David Hayes
fuente
fuente
Respuestas:
Para aquellos que no están locos por VB, aquí está en c #:
Tenga en cuenta que debe agregar una referencia a Microsoft Shell Controls and Automation desde la pestaña COM del cuadro de diálogo References.
fuente
Hay un artículo de CodeProject para un lector ID3. Y un hilo en kixtart.org que tiene más información sobre otras propiedades. Básicamente, debe llamar al
GetDetailsOf()
método en el objeto de shell de carpeta parashell32.dll
.fuente
Solución 2016
Agregue los siguientes paquetes de NuGet a su proyecto:
Microsoft.WindowsAPICodePack-Shell
por MicrosoftMicrosoft.WindowsAPICodePack-Core
por MicrosoftPropiedades de lectura y escritura
Importante:
El archivo debe ser válido, creado por el software asignado específico. Cada tipo de archivo tiene propiedades de archivo extendidas específicas y no todos se pueden escribir.
Si hace clic con el botón derecho en un archivo en el escritorio y no puede editar una propiedad, tampoco podrá editarlo en código.
Ejemplo:
Author
oTitle
.Así que asegúrate de usar algunos
try
catch
Tema adicional: MSDN: implementación de controladores de propiedades
fuente
Esta muestra en VB.NET lee todas las propiedades extendidas:
Debe agregar una referencia a Microsoft Shell Controls and Automation desde la pestaña COM del cuadro de diálogo Referencias .
fuente
¡Gracias chicos por este hilo! Me ayudó cuando quise averiguar la versión de un archivo exe. Sin embargo, necesitaba descubrir la última parte de lo que se llama Propiedades extendidas.
Si abre las propiedades de un archivo exe (o dll) en el Explorador de Windows, obtendrá una pestaña Versión y una vista de Propiedades extendidas de ese archivo. Quería acceder a uno de esos valores.
La solución a esto es el indexador de propiedades FolderItem.ExtendedProperty y si coloca todos los espacios en el nombre de la propiedad, obtendrá el valor. Por ejemplo, File Version pasa a FileVersion, y ahí lo tiene.
Espero que esto ayude a alguien más, solo pensé en agregar esta información a este hilo. ¡Salud!
fuente
GetDetailsOf()
Método: recupera detalles sobre un elemento en una carpeta. Por ejemplo, su tamaño, tipo o la hora de su última modificación. Las propiedades del archivo pueden variar según laWindows-OS
versión.fuente
Folder rFolder = shell.NameSpace(_rootPath);
. FYI, estoy usando el sistema operativo Windows 8.Utilizar:
Funcionará en versiones de Windows como Windows Server 2008, donde obtendrá el error "No se puede convertir el objeto COM del tipo 'System .__ ComObject' al tipo de interfaz 'Shell32.Shell'" si solo intenta crear el objeto Shell32 normalmente.
fuente
shell
a cualquiera de lasIShellDispatch
interfaces (1-6) y llamar al miembro directamente.Shell32.IShellDispatch ishell = (Shell32.IShellDispatch)shell; Shell32.Folder shellFolder = ishell.NameSpace(baseFolder);
La respuesta de Jerker es un poco más simple. Aquí hay un código de muestra que funciona desde MS :
Para aquellos que no pueden hacer referencia a shell32 estáticamente, pueden invocarlo dinámicamente de esta manera:
fuente
No estoy seguro de para qué tipos de archivos está tratando de escribir las propiedades, pero taglib-sharp es una excelente biblioteca de etiquetas de código abierto que resume muy bien toda esta funcionalidad. Tiene una gran cantidad de soporte integrado para la mayoría de los tipos de archivos multimedia populares, pero también le permite realizar un etiquetado más avanzado con prácticamente cualquier archivo.
EDITAR: He actualizado el enlace a taglib sharp. El enlace anterior ya no funcionaba.
EDITAR: Se actualizó el enlace una vez más por el comentario de kzu.
fuente
Aquí hay una solución para leer, no escribir, las propiedades extendidas basadas en lo que encontré en esta página y en ayuda con los objetos shell32 .
Para ser claros, esto es un truco. Parece que este código aún se ejecutará en Windows 10, pero afectará algunas propiedades vacías. La versión anterior de Windows debería usar:
En Windows 10 asumimos que hay alrededor de 320 propiedades para leer y simplemente omitimos las entradas vacías:
Como se mencionó, debe hacer referencia al ensamblado Com Interop.Shell32.
Si obtiene una excepción relacionada con STA, encontrará la solución aquí:
Excepción al usar Shell32 para obtener propiedades extendidas del archivo
No tengo idea de cómo serían esos nombres de propiedades en un sistema externo y no pude encontrar información sobre qué constantes localizables usar para acceder al diccionario. También encontré que no todas las propiedades del cuadro de diálogo Propiedades estaban presentes en el diccionario devuelto.
Por cierto, esto es terriblemente lento y, al menos en Windows 10, analizar las fechas en la cadena recuperada sería un desafío, por lo que usar esto parece ser una mala idea para empezar.
En Windows 10 definitivamente debería usar la biblioteca Windows.Storage que contiene SystemPhotoProperties, SystemMusicProperties, etc. https://docs.microsoft.com/en-us/windows/uwp/files/quickstart-getting-file-properties
Y finalmente, publiqué una solución mucho mejor que usa WindowsAPICodePack allí
fuente