【问题标题】:C# SoundPlayer class isn't finding the file at the specified pathC# SoundPlayer 类在指定路径中找不到文件
【发布时间】:2019-10-14 18:18:45
【问题描述】:

我正在使用 System.IO 命名空间的 Path.GetFullPath,它正确地提取了我存储在程序中的声音文件的绝对文件路径。它在 MessageBox 中显示它,并且文件路径绝对正确。但是,当我使用 SoundPlayer 调用完全相同的文件路径时,它表示该位置不存在声音文件。我的代码完全没有问题。

error message

absolute filepath

where the file is stored in the solution explorer

【问题讨论】:

  • 声音播放器查找文件的路径是什么?我的猜测是声音播放器正在构建目录(bin)中查找,但您没有该文件,您的解决方案目录中有该文件。您是在构建时将波形文件“复制到本地”到您的 bin 中还是手动复制到您的 bin 文件夹中?

标签: c# wpf filepath soundplayer


【解决方案1】:

Path.GetFullPath 根据您的部分路径字符串和您的当前目录

返回一个完整的路径

当前目录,如果你启动编译的可执行文件,例如Windows 资源管理器,例如bin/Debug 你正在双击它。

如果你从 Visual Studio 调试器启动它,当前路径将是解决方案或项目目录(不记得了),无论如何都是默认的。

因此,如果您想同时执行这两种操作,则这种获取文件路径的方案不起作用:有时从 Visual Studio 开始,有时直接从 Visual Studio 开始(例如,如果您将二进制文件复制给其他人以尝试我们的酷程序)。 请尝试以下操作:

  • 在您的解决方案目录中,有一个例如“data”文件夹除了 bin 文件夹和您的源文件等 - 假设您使用名为“bin”的文件夹的默认布局,其中二进制文件的 Debug 和 Release 文件夹位于
  • 使用可靠的方法获取可执行文件的绝对路径
  • 利用您对目录结构的了解从可执行文件夹“踩回”到“数据”文件夹,您的音频文件可以在该文件夹中(直接,或者可能在“音频”子文件夹中?)

可能是这样的:

using System.IO;
// ...
public static string GetExeDirSubPath(string subPath)
{
    return new DirectoryInfo( Path.Combine( GetExeDirPath(), subPath ) ).FullName; // DI stripts dtuff  like "..\..\" and moves to the actual path
}

public static string GetExeDirPath()
{
    System.Reflection.Assembly a = System.Reflection.Assembly.GetEntryAssembly();
    string baseDir = System.IO.Path.GetDirectoryName(a.Location);
    return baseDir;
}

然后,假设上面列出的目录结构,您将获得音频文件的完整路径:

// first "..": go from Debug or Release folder of your exe to bin
// second "..": go from bin to the folder containing both: bin and data folders
var fullpath = GetExeDirSubPath( "../../data/audio/silly_sound.wav" );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-15
    • 1970-01-01
    • 1970-01-01
    • 2021-10-07
    • 2020-06-21
    • 1970-01-01
    相关资源
    最近更新 更多