Path.GetFullPath возвращает заполненный путь на основе вашей строки неполного пути и вашего текущего каталога
Текущий каталог, если вы запустите свой скомпилированный исполняемый файл, например, из проводника Windows, будетнапример, bin / Debug, вы дважды щелкаете по нему.
Если вы запустите его из отладчика Visual Studio, текущим путем будет каталог решения или проекта (не помню), по умолчанию в любом случае.
Таким образом, эта схема получения пути к файлу не работает, если вы хотите сделать оба: иногда запускаются из Visual Studio, а иногда напрямую (например, если вы копируете двоичные файлы кому-то еще, чтобы попробовать нашклассная программа). Попробуйте выполнить следующее:
- в каталоге решений, например, есть папка «data» , кроме папка bin, ваши исходные файлы и т. Д. - при условии, что вы используете макет папки по умолчанию с именем«bin», где папки Debug и Release для двоичных файлов
- используют надежный метод для получения абсолютного пути к вашему исполняемому файлу
- используют ваши знания структуры каталогов для «педалирования назад»из исполняемой папки в папку «data», где может находиться ваш аудиофайл (напрямую, или, может быть, в подпапке «audio»?)
Это может выглядеть так:
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" );