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

質問
-
こんにちは、皆様。早速用件に入らせていただきます。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;
}
}
}
回答
-
多分拡張子がmp3のファイルを再生したいんだと思いますが、ファイル読み込みのところでfilename == "*.mp3"という間違った比較をしているために、必ずwebBrowser1.Navigateが実行されます。
その結果、WebBrowerの実体であるInternetExploerがファイルをダウンロードを行うためにダウンロード確認のダイアログが出ますし、関連付けしてあるアプリも起動します。拡張子がmp3であるファイルをaxWindowsMediaPlayerで再生させるにはこの間違った条件を修正する必要があります。
例えばとかです。if(filename.EndsWith("mp3" , StringComparison.CurrentCultureIgnoreCase))
- 回答としてマーク 雀 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
すべての返信
-
多分拡張子がmp3のファイルを再生したいんだと思いますが、ファイル読み込みのところでfilename == "*.mp3"という間違った比較をしているために、必ずwebBrowser1.Navigateが実行されます。
その結果、WebBrowerの実体であるInternetExploerがファイルをダウンロードを行うためにダウンロード確認のダイアログが出ますし、関連付けしてあるアプリも起動します。拡張子がmp3であるファイルをaxWindowsMediaPlayerで再生させるにはこの間違った条件を修正する必要があります。
例えばとかです。if(filename.EndsWith("mp3" , StringComparison.CurrentCultureIgnoreCase))
- 回答としてマーク 雀 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