C# 迭代媒体文件属性并在列表框中显示文件名

C# 迭代媒体文件属性并在列表框中显示文件名,c#,winforms,listbox,C#,Winforms,Listbox,我正在编写一个简单的WinForms应用程序,我将在编辑视频片段之前使用它,以便在组合和“编辑”时了解所有视频文件的总长度 所以理想情况下,我加载它们,然后得到每个视频的持续时间,并对它们进行统计 但是,由于除了使用WindowsMediaPlayer获取文件名和持续时间之外,我还使用了一个外部库iwmpmpmedia,因此我无法确定要使用哪个集合类 当我使用字符串数组获取文件名时,我得到了整个路径,这是我不想要的。请参阅以下代码段: using WMPLib; public partia

我正在编写一个简单的WinForms应用程序,我将在编辑视频片段之前使用它,以便在组合和“编辑”时了解所有视频文件的总长度

所以理想情况下,我加载它们,然后得到每个视频的持续时间,并对它们进行统计

但是,由于除了使用
WindowsMediaPlayer
获取文件名和持续时间之外,我还使用了一个外部库
iwmpmpmedia
,因此我无法确定要使用哪个集合类

当我使用字符串数组获取文件名时,我得到了整个路径,这是我不想要的。请参阅以下代码段:

 using WMPLib;

 public partial class frmBacklinkMediaSerializer : Form
 {
    WindowsMediaPlayer wmp;
    IWMPMedia mediainfo;

    Double Duration(String file)
    {
        wmp = new WindowsMediaPlayer();
        mediainfo = wmp.newMedia(file);
        return mediainfo.duration;
    }

    void callDialogBox()
    {
        OpenFileDialog theDialog = new OpenFileDialog();
        theDialog.Filter = "MP4 Videos (*.mp4)|*.mp4";
        theDialog.FilterIndex = 0;
        theDialog.Multiselect = true;
        DialogResult result = theDialog.ShowDialog();
        string[] selected = theDialog.FileNames;
        string strFilename = theDialog.FileName;

        if (result == DialogResult.OK)
        {
            FileInfo oFileInfo = new FileInfo(strFilename);
            string temp = Duration(strFilename).ToString();
            TimeSpan conversion = 
            TimeSpan.FromSeconds(Duration(strFilename));
            if (strFilename != null || strFilename.Length != 0)
            {
                MessageBox.Show("My file names are below: " + "\n\n" + mediainfo.name + "\n\n" + "My file duration is: " + conversion.ToString(), "Video Properties", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);                  
            }
        }
    }

    //I then call callDialogBox() on a button click event
输出如以下屏幕截图所示:

我希望能够选择多个文件并在列表框中显示,但我得到:

其他信息:无法使用已与其基础RCW分离的COM对象

将项目添加到列表框时

因此,有两个问题:

1.能够选择并列出彼此下方的文件名

2.在列表框中列出文件名

关于点1.,下面的代码片段确实实现了这一点,但给出了完整的文件名

string[]selected=dialog.filename;
foreach(选定项中的字符串项)
{
Show(“这是您的文件名:”+项);
}

给我整条路。在线阅读一些资源,但我似乎无法得到我想要的


我看了一下:但它没有起作用。

尝试以下方法将文件名添加到列表框中:

listBox1.Items.AddRange(selected);
完成后,您可以显示总持续时间

编辑: 要仅列出文件名,请使用以下行

listBox1.Items.AddRange(selected.Select(o=>System.IO.Path.GetFileName(o)).ToArray());

您想在列表框中列出所有选定的文件名吗?@Abhishek并总结其持续时间。您必须在哪里显示持续时间的总和?@Abhishek标签、消息框或任何内容。。这一部分并不是很挑剔,正如问题中明确提到的,所选字符串数组返回文件名及其路径,我不想要文件名的路径部分。@Harold\u Finch:Hi Harold。我已经编辑了答案。希望这是你想要的。