zoukankan      html  css  js  c++  java
  • 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、解决方法:

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

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

  • 相关阅读:
    [Tip: VS debugging]F5 VS Ctrl +F5
    C#: boxing and unboxing
    [Tip: check overflow/underflow C#]
    C# floating Point types
    UVa 103 Stacking Box(记忆化搜索)
    POJ 3321 apple tree(树形数组)
    UVa 116 Unidirectional TSP(简单旅行商DP)
    UVa 562 Dividing coins(简单DP)
    UVa 10003 Cutting Sticks(区间DP)
    UVa 348 Optimal Array Multiplication Sequence(链式DP/区间DP)
  • 原文地址:https://www.cnblogs.com/china-chang/p/7205510.html
Copyright © 2011-2022 走看看