C#shell32.dll的⽤法
1 ⾸先要使⽤shell3
2  请在项⽬引⽤中添加shell32.dll 的引⽤  (备注:该引⽤是系统dll⽂件在C:\Windows\System32  ⽬录下可以⾃⾏拷贝到项⽬中)
private void  btnTest_Click(object sender, EventArgs e)    //测试的按钮点击事件
{
//测试,将excel中的student导⼊到sqlserver的DB_MES中,如果sql中的数据表不存在则创建
System.Windows.Forms.OpenFileDialog fd = new OpenFileDialog();  // new ⼀个打开⽂件对话框⽤于选择⽂件
if (fd.ShowDialog() == DialogResult.OK)
{
string filePath = fd.FileName;
//实例化⼀个shell 对象
Shell32.Shell shell = new Shell32.ShellClass();
//获取⽂件所在⽗⽬录对象
Folder folder = shell.NameSpace(filePath.Substring(0, filePath.LastIndexOf('\\')));
//获取⽂件对应的FolderItem对象
FolderItem item = folder.ParseName(filePath.Substring(filePath.LastIndexOf('\\') + 1));
//字典存放属性名和属性值的键值关系对
Dictionary<string, string> Properties = new Dictionary<string, string>();
int i = 0;
while (true)
{
/
/获取属性名称
string key = folder.GetDetailsOf(null, i);
if (string.IsNullOrEmpty(key))
{
//当⽆属性可取时,推出循环
break;
}
//获取属性值
string value = folder.GetDetailsOf(item, i);
//保存属性
Properties.Add(key, value);
this.richTextBox1.Text += i.ToString() + key + ":" + value + '\n';  // 窗体界⾯上创建的richTextBox 控件上显⽰所有的属性值
i++;
}
}
//------我的开的⽂件名是1.xls---------实际运⾏效果如下------根据运⾏结果可以查看我们需要的信息对应的索引
0名称:1.xls
1⼤⼩:16.0 KB
2项⽬类型:Microsoft Office Excel 97-2003 ⼯作表
3修改⽇期:2017/12/22 11:35
4创建⽇期:2017/12/22 10:38
5访问⽇期:2017/12/22 11:35
6属性:A
7脱机状态:
8脱机可⽤性:
9假设的类型:⽂档
10所有者:USER-20170822CM\Administrator
11种类:⽂档
12拍摄⽇期:
13参与创作的艺术家:
14唱⽚集:
15年:
16流派:
17指挥者:
18标记:
19分级:未分级
20作者:Administrator
21标题:
23类别:
24备注:
25版权:
26#:
27长度:
28⽐特率:
29保护:
30照相机型号:
31尺⼨:
32照相机制造商:
33公司:
34⽂件说明:
35程序名称:
36持续时间:
37联机:
38重复:
39位置:
40可选参加者地址:
41可选的与会者:
42组织者地址:
43组织者名称:
44提醒时间:
45必选的与会者地址:
46必选的与会者:
47资源:
48会议状态:
49忙闲状态:
50总⼤⼩:
51帐户名:
52任务状态:
53计算机:USER-20170822CM (本机) 54纪念⽇:
55助理姓名:
56助理电话:
57⽣⽇:
58商务地址:
59公司所在市县:
60公司所在国家/地区:
61:
62公司所在地的:
63公司所在省市⾃治区:
64公司所在街道地址:
65业务传真:
66公司主页:
67商务电话:
68回呼号码:
69车载电话:
70⼦⼥:
71公司主要电话:
72部门:
73电⼦邮件地址:
74电⼦邮件2:
75电⼦邮件3:
76电⼦邮件列表:
77电⼦邮件显⽰名称:
78⽂件为:
79名字:
80全名:
81性别:
82名:
83个⼈爱好:
84住宅地址:
85住宅所在市/县:
86住宅所在国家/地区:
87住宅邮箱:
88住宅所在地的:
89住宅所在省市⾃治区:
90住宅所在街道地址:
91住宅传真:
92住宅电话:
93即时通讯地址:
94姓名缩写:
95职务:
96标签:
97姓⽒:
98通讯地址:
99中间名:
100⼿机:
101昵称:
102办公位置:
103其他地址:
104其他市县:
105其他国家/地区:
108其他省市⾃治区:
109其他街道地址:
110寻呼机:
111称谓:
112市县:
113国家/地区:
114邮箱:
115:
116省市⾃治区:
117街道地址:
118主要电⼦邮件:
119主要电话:
120职业:
121配偶/伙伴:
122后缀:
123TTY/TTD 电话:
124Telex:
125⽹页:
126内容状态:
127内容类型:
128获取⽇期:
129存档⽇期:
130完成⽇期:
131设备类别:
132已连接:
133发现⽅法:
134友好名称:
135本地计算机:
136制造商:
137型号:
138已配对:
139分类:
140打印机状态:
141客户端 ID:
142参与者:
143创建内容的时间:
144最后⼀次打印的时间:
145最后⼀次保存的⽇期:2017/12/22 11:35
146分部:
147⽂档 ID:
148页码范围:
149幻灯⽚:
150总编辑时间:
151字数:
152截⽌⽇期:
153结束⽇期:
154⽂件计数:
155⽂件名:1.xls
156⽂件版本:
157标志颜⾊:
158标记状态:
159可⽤空间:
160位深度:
161⽔平分辩率:
162宽度:
163垂直分辩率:
164⾼度:
165重要性:
166是附件:
167已删除:
168加密状态:
169有标志:
170已完成:
171不完整:
172阅读状态:
173已共享:否
174编写者:
175⽇期:
176⽂件夹名称:桌⾯
177⽂件夹路径:C:\⽤户\Administrator\桌⾯178⽂件夹:桌⾯ (C:\⽤户\Administrator)
179参加者:
180路径:C:\⽤户\Administrator\桌⾯\1.xls
181依位置:
182类型:Microsoft Office Excel 97-2003 ⼯作表183联系⼈:
184条⽬类型:
185语⾔:
186访问时间:
187描述:
188链接状态:未解析
189链接⽬标:
194制作⼈:
195发布者:
196副标题:
197⽤户 Web URL: 198创作⼈:
199附件:
200密件抄送地址: 201密件抄送:
202抄送地址:
203抄送:
204会话 ID:
205接收⽇期:
206发送⽇期:
207发件⼈地址: 208发件⼈:
209带有附件:
210发信⼈地址: 211发信⼈:
212存储:
213收件⼈地址: 214操作标题:
215收件⼈:
216⾥程:
217唱⽚集艺术家: 218唱⽚集 ID: 219每分钟节拍数: 220作曲者:
221初始调性:
222编译的⼀部分: 223氛围:
224部分设置:
225时期:
226颜⾊:
227家长分级:
228⽗级分级原因: 229已⽤空间:
230EXIF 版本: 231事件:
232曝光补偿:
233曝光程序:
234曝光时间:
235光圈值:
236闪光灯模式: 237焦距:
23835mm 焦距: 239ISO 速度:
240镜头制造商: 241镜头型号:
242光源:
243最⼤光圈:
244测光模式:
245⽅向:
246⼈员:
247程序模式:
248饱和度:
249⽬标距离:
250⽩平衡:
251优先级:
252项⽬:
253频道号:
254剧集名称:
255关闭字幕:
256重新运⾏:
257SAP:
258⼴播⽇期:
259节⽬描述:
260记录时间:
261电台呼叫信号: 262电台名:
263摘要:
264⽚段:
265⾃动汇总:
exists的用法266搜索级别:
267敏感度:
268共享设备:
269共享状态:专⽤270产品名称:
271产品版本:
272⽀持链接:
273源:
278总计⽂件⼤⼩:
279合法商标:
280视频压缩:
281导演:
282数据速率:
283帧⾼度:
284帧速率:
285帧宽度:
286总⽐特率:
上⾯的⽅法返回所有属性值,在我的Win7 Pro 64bit 上,返回了287个属性!可以想象,信息是很丰富的,但是速度也是够慢的。
可以看到,上⾯代码⽤了⼀个循环,获取属性名和属性值时都是通过i来索引的。那么,我们是不是就能不通过循环,⽽直接⽤下标来获取想要的属性呢?代码如下:
/// <summary>
/// 获取指定⽂件指定下标的属性值
/// </summary>
/// <param name="filePath">⽂件路径</param>
/// <param name="index">属性下标</param>
/// <returns>属性值</returns>
public static string GetPropertyByIndex(string filePath, int index)
{
if (!File.Exists(filePath))
{
throw new FileNotFoundException("指定的⽂件不存在。", filePath);
}
//初始化Shell接⼝
Shell32.Shell shell = new Shell32.ShellClass();
//获取⽂件所在⽗⽬录对象
Folder folder = shell.NameSpace(Path.GetDirectoryName(filePath));
//获取⽂件对应的FolderItem对象
FolderItem item = folder.ParseName(Path.GetFileName(filePath));
string value = null;
//获取属性名称
string key = folder.GetDetailsOf(null, index);
if (false == string.IsNullOrEmpty(key))
{
//获取属性值
value = folder.GetDetailsOf(item, index);
}
return value;
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。