我需要为某些Word/PDF文档设置Company字段值.我在谈论你在文件属性下看到的扩展文件属性(摘要/作者/标题等).
我知道如何获得它们(通过使用shell32.dll类库).我假设我也可以使用相同的类库来设置它们,但是看起来编写扩展属性似乎有点困难并且shell32.dll不允许这样做.
我发现了一些东西taglib-sharp,似乎可以选择设置扩展属性,但我真的不明白它是如何工作的.
为了使Shell32工作,我应该在C#应用程序中包含哪些内容?
编辑:
我的应用程序无法识别shell32.我应该包括哪些参考或库?我想要做的是:
Shell32.Shell shell = new Shell32.Shell();
Run Code Online (Sandbox Code Playgroud)
我得到的是一个错误:
错误1找不到类型或命名空间名称"Shell32"(您是否缺少using指令或程序集引用?)
我试图使用Shell32在c#中获取扩展文件属性.
我的代码如下.
var file = FileUpload1.PostedFile;
List<string> arrHeaders = new List<string>();
Shell shell = new ShellClass();
//Exception is thrown at next line
Folder rFolder = shell.NameSpace(Path.GetDirectoryName(file.FileName));
FolderItem rFiles = rFolder.ParseName(Path.GetFileName(file.FileName));
for (int i = 0; i < short.MaxValue; i++)
{
string value = rFolder.GetDetailsOf(rFiles, i).Trim();
arrHeaders.Add(value);
}
Run Code Online (Sandbox Code Playgroud)
我得到如下例外情况.

消息 - 无法将"Shell32.ShellClass"类型的COM对象强制转换为接口类型"Shell32.IShellDispatch6".此操作失败,因为对IID为"{286E6F1B-7113-4355-9562-96B7E9D64C54}"的接口的COM组件的QueryInterface调用由于以下错误而失败:不支持此类接口(HRESULT异常:0x80004002(E_NOINTERFACE)) .
堆栈跟踪 - 位于Shell32.ShellClass.NameSpace(Object vDir)的System.StubHelpers.StubHelpers.GetCOMIPFromRCW(Object objSrc,IntPtr pCPCMD,IntPtr&ppTarget,Boolean&pfNeedsRelease),位于c:中的PBSWebApplication.Test.Button1_OnClick(Object sender,EventArgs e)\Projects\PBSWebApplication\PBSWebApplication\PBSWebApplication\Test.aspx.cs:System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)at System.Web.UI.WebControls.Button.OnClick(EventArgs e)的第33行System.Web.UI.Page.RaisePostBackEvent上的System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl,String eventArgument)中的System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) System.Web.UI.Page.ProcessRequestMain上的(NameValueCollection postData)(Boolean includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint)
如何解决这个问题?
谢谢.
我正在尝试转换一堆图片和视频,但是当我将其转换为新格式时,我忽略了原始文件的属性.我希望能够从旧文件中读取"Date of"属性,并使用PowerShell在新文件上更新它.
我希望在没有打开的情况下在磁盘上找到图像的高度/宽度,如果可能的话(出于性能原因).
图像的Windows属性窗格包含宽度,高度,位深度等信息,这使我相信它正在某处存储元数据.我如何访问此信息?
我有一个简单的WCF服务,允许客户/消费者上传图像,音频或视频文件.上传后,服务应该分析文件并以某种方式检索以下属性:
图像:宽度,高度,拍摄日期,使用的程序
音频:运行时,艺术家,专辑,流派,比特率,出版年份
视频:运行时,宽度,高度,帧/秒,视频比特率,音频比特率
显然,Windows可以很容易地获取和显示这些属性,但我如何在C#中实现呢?
我正在寻找一种在C#中读取文档属性的方法.我听说过dsofile.dll,但它似乎是一个旧的COM包装器,并且想知道.NET框架/ C#是否有更现代的东西.我实际阅读的不是Office文档文件,而是具有自定义属性的Solidworks .SLDDRW文件.您可以在Windows资源管理器中通过右键单击该文件来查看和更改这些内容,然后转到"属性"窗口的"自定义"选项卡.
任何人都知道如何在C#/ .NET 3.5中阅读这些自定义属性?
谢谢!
我正在尝试编写一个实用程序,用于在录制的视频中插入我自己的信息,但似乎没有一个库可以完成此操作。
在我最近的尝试中,我使用了 TagLib Sharp 库,但这似乎不适合音频文件:
private void ApplyTags(string p_sFilePath, Result p_Result)
{
TagLib.File f = TagLib.File.Create(p_sFilePath);
f.Tag.Title = p_Result.title;
f.Tag.Year = Convert.ToUInt32(p_Result.year);
f.Save();
}
Run Code Online (Sandbox Code Playgroud)
虽然填写视频文件的标题和年份确实有效,但 TagLib Sharp 似乎不支持“评级”、“贡献艺术家”、“导演”等项目。
所以我的问题是,是否有另一个库对视频文件提供更广泛的支持?如果没有,我该如何手动为 MP4 或 AVI 执行此操作?
我已经看到了GetDetailsOf()用于获取有关shell项目的详细信息的答案,但数字总是神奇的数字.
我查看了FolderItem 和GetDetailsOf的文档, 但一无所获.(后者中的列表并非适用于所有内容.它们不包括"描述","作者",也不包括回收站删除日期...)
是否有一些方法可以返回项目的可能选项?它在某处列出了吗?