2014-09-12 89 views
0

我在做一个应用程序,其中我把一些MP3文件合并成一个单一的文件夹,您可能会看到下面↓如何使用应用程序的路径,从资源和其他文件夹C#应用程序太

enter image description here该目录中的图片的链接

现在我从工具箱中拿出了一个Windows媒体播放器工具,我正在通过一个按钮编写此代码。

private void button3_Click(object sender, EventArgs e) 
{ 
axWindowsMediaPlayer1.URL = "C:\\Users\\Windows\\Documents\\Visual Studio 2012\\Projects\\FreshAbc\\FreshAbc\\dreammusic\\DrmMTrack8.lite.mp3"; 
} 

但是当我将其发布在其他电脑上运行它显示我一个消息,目录丢失,等等等等,所以我简单的问题是,有什么办法来写这个代码是这样,这样,如果我给有人发布版本,他可以使用: -

private void button3_Click(object sender, EventArgs e) 
    { 
    axWindowsMediaPlayer1.URL = "\\dreammusic\\DrmMTrack8.lite.mp3"; 
    } 

回答

0

如果这些文件都存储在“特殊文件夹”(如My Documents,或AppData/Roaming)中的一个,最简单的方法是使用Environment.GetFolderPathEnvironment.SpecialFolder。即调用Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments))会在XP后机器上返回类似C:\Users\(some user)\Documents\的东西。

如果实际上取决于您如何部署文件。如果它们相对于应用程序的入口组件中的子文件夹部署,然后指定一个相对路径应该工作:

axWindowsMediaPlayer1.URL = "dreammusic\\DrmMTrack8.lite.mp3"; 

与您的代码的问题是领先反斜杠\\dreammusic),这使得您的路径绝对(根源)路径,并解析为类似C:\\dreammusic\\DrmMTrack8.lite.mp3

+1

我认为问题位于音乐位于相对于可执行文件路径,而不是在用户特殊文件夹 – Marco 2014-09-12 10:10:58

1

您可以使用反射此:

private void button3_Click(object sender, EventArgs e) 
{ 
    var AssemblyPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase); 
    axWindowsMediaPlayer1.URL = Path.Combine(AssemblyPath, "dreammusic\\DrmMTrack8.lite.mp3"); 
} 
+0

不适用于您的给定解决方案:( – iFAMoUS 2014-09-12 10:26:26

+0

您收到错误是什么? – Marco 2014-09-12 11:06:04

1

首先,你需要确保所有的MP3的“复制到输出目录”属性的设置将被复制到输出文件夹。点击每个MP3一招一式中设置的“属性”选项卡“一直拷贝”或“复制如果较新”:

Set to Copy To Output folder

然后你就可以相应地设置您的网址:

private void button3_Click(object sender, EventArgs e) 
{ 
    axWindowsMediaPlayer1.URL = @"dreammusic\DrmMTrack8.lite.mp3"; 
} 

当您现在部署您的应用程序时,它将与MP3文件一起部署,并且URL将起作用。

相关问题