Shell32.ShellClass服务器操作系统无法获取 音频文件时长问题

前言:

上传音频文件,自动写入此音频文件的时长,这里用 COM组件Microsoft Shell Controls And Automation来实现。

 

首先

1、引用:Microsoft Shell Controls And Automation

注意:这里是1.0版本的,有的使用的是1.2版本的,如果1.0的有问题,请换成1.2的

 

2、代码如下

                string strFileName = FileHelper.MapPath(linkUrl);//linkUrl是上传到服务器的路径
                string dirName = System.IO.Path.GetDirectoryName(strFileName);
                string SongName = System.IO.Path.GetFileName(strFileName);//获得名称  
                FileInfo fInfo = new FileInfo(strFileName);
                Shell32.ShellClass sh = new Shell32.ShellClass();
                Shell32.Folder dir = sh.NameSpace(dirName);
                Shell32.FolderItem item = dir.ParseName(SongName);                
                string strTime = System.Text.RegularExpressions.Regex.Match(dir.GetDetailsOf(item, -1), "\\d:\\d{2}:\\d{2}").Value;  //时长 
                duration = Convert.ToInt64(TimeSpan.Parse(strTime).TotalSeconds); //音频的时常,单位
                size = fInfo.Length;//字节数(这个是获取文件大小,单位是Byte)

上面这段代码在本地测试的时候是完全能够读到的

但是发布在服务器上的时候,下面句代码会报错,原因是GetDetailsOf(item, -1)方法获取不到任何信息

 string strTime = System.Text.RegularExpressions.Regex.Match(dir.GetDetailsOf(item, -1), "\\d:\\d{2}:\\d{2}").Value;  //时长

于是去服务器查看了文件的详细信息,如下图所示,并没有时长信息。

所以这个是由操作系统导致的GetDetailsOf(,)获取不到音频文件时长的问题。

 

3、解决方法:

这个问题主要是服务器没有安装关于音频的功能,添加上功能即可。

注意:安装这两个功能后服务器会被要求重启才能生效

转载于:https://www.cnblogs.com/china-chang/p/7205510.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值