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、解决方法:

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

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

posted @ 2017-07-19 14:09  风狐  阅读(357)  评论(0编辑  收藏  举报