none
mp3の再生において自作ソフトに埋め込んだWMPコンポーネントが使えずに、「ファイルのダウンロード」ダイアログが出てしまう。 RRS feed

  • 質問

  • こんにちは、皆様。早速用件に入らせていただきます。OSは、VISTA HOME。開発は、VS2008STANDARD。

    HD上にあるmp3の再生において自作ソフトに埋め込んだWMPコンポーネントで再生されず、「ファイルのダウンロード」ダイアログが出てしまいます。その際、「開く」を選択すると、OSのWMP11が起動して、再生されてしまうので、mp3の起動ソフトを自作ソフトに設定しても、自作ソフトんの新しいフォームが起動してしまうだけで、再生されません。

    どうか解決策をご教授お願いします。問題が起きているソースを以下に公開します。

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    //add
    using System.IO;

    namespace ebookreader1cs
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                toolStripStatusLabel1.Text = "";
            }

            private void button1_Click(object sender, EventArgs e)
            {
                if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
                {
                    string foldername = folderBrowserDialog1.SelectedPath;
                    textBox1.Text = foldername;
                    //
                    DirectoryInfo dirinfo;
                    FileInfo[] fileinfolist;
                    this.listView1.Clear();
                    this.listView1.View = View.Details;
                    this.listView1.Columns.Add("ファイル名", 200);
                    //this.listView1.Columns.Add("サイズ", 60);
                    //this.listView1.Columns.Add("総再生時間", 120);
                    dirinfo = new DirectoryInfo(foldername);
                    fileinfolist = dirinfo.GetFiles();
                    foreach (FileInfo fileinfo in fileinfolist)
                    {
                        ListViewItem fileitem = new ListViewItem(fileinfo.Name);
                        //axWindowsMediaPlayer1.mediaCollection.add(foldername + "\\" + fileinfo.Name);
                        //string durat = axWindowsMediaPlayer1.currentMedia.duration.ToString();
                        //fileitem.SubItems.Add(fileinfo.Length.ToString());
                        //fileitem.SubItems.Add(durat);
                        this.listView1.Items.Add(fileitem);
                    }
                }
            }

            private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
            {
                string filename = e.Item.Text;
                string filepath = textBox1.Text + "\\" + filename;                   
                if (filename == "*.mp3")
                {
                    toolStripStatusLabel1.Text = filepath;
                    axWindowsMediaPlayer1.settings.autoStart = true;
                    axWindowsMediaPlayer1.URL = filepath;
                }
                else
                {
                    try
                    {
                        webBrowser1.Navigate(new Uri(filepath));
                    }
                    catch
                    {
                        return;
                    }
                }
            }
        }
    }

    また、一方で以下のソースでは、問題ありません。

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    //add
    using System.IO;

    namespace audioplayeertest1cs
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                toolStripStatusLabel1.Text = "";
            }

            private void button1_Click(object sender, EventArgs e)
            {
                if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
                {
                    string foldername = folderBrowserDialog1.SelectedPath;
                    textBox2.Text = foldername;
                    //
                    DirectoryInfo dirinfo;
                    FileInfo[] fileinfolist;
                    this.listView1.Clear();
                    this.listView1.View = View.Details;
                    this.listView1.Columns.Add("ファイル名", 80);
                    this.listView1.Columns.Add("サイズ",60);
                    //this.listView1.Columns.Add("総再生時間", 120);
                    dirinfo = new DirectoryInfo(foldername);
                    fileinfolist = dirinfo.GetFiles();
                    foreach (FileInfo fileinfo in fileinfolist)
                    {
                        ListViewItem fileitem = new ListViewItem(fileinfo.Name);
                        //axWindowsMediaPlayer1.mediaCollection.add(foldername + "\\" + fileinfo.Name);
                        //string durat = axWindowsMediaPlayer1.currentMedia.duration.ToString();
                        fileitem.SubItems.Add(fileinfo.Length.ToString());
                        //fileitem.SubItems.Add(durat);
                        this.listView1.Items.Add(fileitem);
                    }
                }
            }

            private void button2_Click(object sender, EventArgs e)
            {
                openFileDialog1.InitialDirectory = folderBrowserDialog1.SelectedPath;
                if (openFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    StreamReader sr = new StreamReader(openFileDialog1.FileName);
                    textBox1.Text = sr.ReadToEnd();
                    sr.Close();
                }
            }

            private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
            {
                string filename = e.Item.Text;
                string filepath = textBox2.Text + "\\" + filename;
                toolStripStatusLabel1.Text = filepath;
                axWindowsMediaPlayer1.settings.autoStart = true;
                axWindowsMediaPlayer1.URL = filepath;
            }
        }
    }

    2010年12月18日 9:43

回答

  • 多分拡張子がmp3のファイルを再生したいんだと思いますが、ファイル読み込みのところでfilename == "*.mp3"という間違った比較をしているために、必ずwebBrowser1.Navigateが実行されます。
    その結果、WebBrowerの実体であるInternetExploerがファイルをダウンロードを行うためにダウンロード確認のダイアログが出ますし、関連付けしてあるアプリも起動します。

    拡張子がmp3であるファイルをaxWindowsMediaPlayerで再生させるにはこの間違った条件を修正する必要があります。
    例えば

    if(filename.EndsWith("mp3" , StringComparison.CurrentCultureIgnoreCase))
    

    とかです。
    • 回答としてマーク 2010年12月18日 11:00
    2010年12月18日 10:51
  • 拡張子を見るのであれば、Path.GetExtension を挙げておきます。
    http://msdn.microsoft.com/ja-jp/library/system.io.path.getextension.aspx

    なお、EndsWith("mp3") では、hogehogemp3 といった拡張子を持たないものも含みますので、こちらでやるのであれば、EndsWith(".mp3") でしょうか。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    • 回答としてマーク 2010年12月20日 19:01
    2010年12月19日 6:32
    モデレータ

すべての返信

  • 多分拡張子がmp3のファイルを再生したいんだと思いますが、ファイル読み込みのところでfilename == "*.mp3"という間違った比較をしているために、必ずwebBrowser1.Navigateが実行されます。
    その結果、WebBrowerの実体であるInternetExploerがファイルをダウンロードを行うためにダウンロード確認のダイアログが出ますし、関連付けしてあるアプリも起動します。

    拡張子がmp3であるファイルをaxWindowsMediaPlayerで再生させるにはこの間違った条件を修正する必要があります。
    例えば

    if(filename.EndsWith("mp3" , StringComparison.CurrentCultureIgnoreCase))
    

    とかです。
    • 回答としてマーク 2010年12月18日 11:00
    2010年12月18日 10:51
  • 解決しました。勉強になりました。本当にありがとうございました。

    2010年12月18日 11:00
  • 拡張子を見るのであれば、Path.GetExtension を挙げておきます。
    http://msdn.microsoft.com/ja-jp/library/system.io.path.getextension.aspx

    なお、EndsWith("mp3") では、hogehogemp3 といった拡張子を持たないものも含みますので、こちらでやるのであれば、EndsWith(".mp3") でしょうか。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    • 回答としてマーク 2010年12月20日 19:01
    2010年12月19日 6:32
    モデレータ
  • あ、確かにdotなしで比較してたらダメですね。
    指摘ありがとうございました。

    2010年12月19日 8:02
  • ありがとうございます。

    2010年12月20日 19:02