Есть программа, в которой проигрывается музыка. При передачи архива на другой компьютер, я не знаю где будет находится его папка со звуковыми файлами. Какой путь стоит указывать, папка , в которой хранится музыка, называется music
У вас есть 4 варианта действий, ну или произвольная их комбинация, по вкусу и потребностям.
1. Предоставить выбор пользователю
В этом случае просто открываете FolderBrowserDialog и получаете путь к папке через свойство FolderBrowserDialog.SelectedPath. Это удобно, если требуется частая смена пути к файлам по желанию пользователя.
2. Указать пути к файлам в конфигурации
Явно прописываете путь в AppСonfig, через стандартный механизм Settings, таким образом можно будет указать путь к папке перед запуском программы в конфигурационном файле приложения. Это удобно, если не требуется часто менять пути к файлам.
3. Указать путь относительно рабочего каталога
Этот и следующий варианты похожи, но не одинаковы. Рабочим каталогом, по умолчанию считается текущий каталог командной строки, или любой оболочки над командной строкой, вроде FAR или TotalComander. Это значит, что он вовсе не обязан совпадать с каталогом, в котором находится исполняемый файл. Получить путь к рабочему каталогу можно так: Environment.CurrentDirectory или так: Directory.GetCurrentDirectory(), тогда путь к вашей папке может быть задан так:
string musicPath = Path.Combine(Environment.CurrentDirectory, "music");
string musicPath = Path.Combine(Directory.GetCurrentDirectory(), "music");
//или как в соседнем ответе
string musicPath = "music";
//или чуть правильнее
string musicPath = @".\music"; //'.' означает текущий каталог
string musicPath = "./music"; //.net понимает и такой вариант главное не смешивать
//прямые и обратные слэши в одном пути
Этот вариант хорош тем, что позволяет программе работать именно в том каталоге, в котором она была вызвана.
Важное замечание, запуск из командной строки и запуск при помощи ярлыка работают по разному. В свойствах ярлыка, рабочий каталог может быть задан явно, в противном случае, рабочим каталогом считается каталог исполняемого файла.
4. Указать путь относительно исполняемого файла
Можно принудительно заставить всегда использовать каталог исполняемого файла, но для этого его нужно получить. Тут тоже есть несколько вариантов. Для WinForms этот каталог можно получить с помощью Application.ExecutablePath. Более универсальный вариант AppDomain.CurrentDomain.BaseDirectory, в этом случае вы всегда получите путь к каталогу в котором лежат сборки вашей программы. Результат будет выглядеть так:
//этот путь содержит завершающий разделитель, поэтому просто добавляем имя папки
string musicPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "music");
//можно так
string musicPath = Path.Combine(new FileInfo(Process.GetCurrentProcess().MainModule.FileName)
.DirectoryName, "music");
//или для WinForms так
string musicPath = Path.Combine(new FileInfo(Application.ExecutablePath)
.DirectoryName, "music");
Этот вариант стоит выбрать, если программа должна работать с файлами строго в своих директориях, например по соображениям безопасности, или еще каким системным ограничениям.
5 Истина где-то рядом
На самом деле ни одна из программ не использует только один из этих вариантов. Обычно используется некоторая комбинация приведенных вариантов, с указанием порядка поиска файлов по всем возможным расположениям, с выдачей ошибки или диалога для явного указания размещения, если файлы не удалось обнаружить ни в одном известном месте.
Ну и небольшое дополнение, которое не относится к вашему вопросу, но относится к теме в целом. Кроме перечисленных вариантов, есть еще стандартные служебные папки вроде %ProgramData%, %AppData%, %Temp% и другие, которые предназначены специально для размещения рабочих и временных файлов, конфигураций и прочих служебных и пользовательских данных, использованием которых пренебрегать не стоит, если не хотите писать для пользователя подробную инструкцию какие папки он должен создать и какие права на них выдать, а ведь пользователь может и не быть администратором компьютера, и просто не иметь прав на все эти манипуляции, да кто их читает эти инструкции <сарказм>.
Если музыка в директории проекта то:
string path="music\\";
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Как создать проект в Visual Studio for Mac для разработки кроссплатформенного десктопного приложения(на C#) с помощью Mono?
работаю с массивом и использую функцию substr, где то есть ошибка но не понимаю где, помогите пожалуйста
У меня есть PHP скрипт который всегда весит в безконечном цикле(обработчик Телеграм бота) Когда я его запускаю в консоле на хостинге (php initphp)...