Как получить относительный путь к файлу в визуальной студии?
Я пытаюсь получить путь к файлу изображения, который я добавил в explorer для разработчика в Visual Studio, но не смог получить относительный путь этого изображения. H - файловая структура моего проекта:
/BulutDepoProject
/FolderIcon
Folder.ico
Main.cs
Я могу получить изображение следующим образом:
"C:\\Users\\Tolga\\Desktop\\BulutDepo\\BulutDepoProject\\FolderIcon\\Folder.ico"
Но я мог бы получить его с чем-то вроде:
"~\\FolderIcon\\Folder.ico"
Я думаю, я не знаю точного синтаксиса, поэтому я не могу получить изображение.: (
Ответы
Ответ 1
Если вы хотите использовать какой-либо внешний файл, возможно, есть способ разместить их в папке в вашем проекте, но не так корректно, как получить их из ресурсов. В регулярном проекте Visual Studio у вас должен быть Resources.resx
файл в разделе Properties
, если нет, вы можете легко добавить свой собственный файл Resource.resx
. И добавьте в него какие-либо файлы, вы можете найти пошаговое руководство для добавления файлов ресурсов в ваш проект здесь.
После наличия файлов ресурсов в вашем проекте их вызывать легко:
var myIcon = Resources.MyIconFile;
Конечно, вы должны добавить инструкцию using Properties
следующим образом:
using <namespace>.Properties;
Ответ 2
Я немного опаздываю, и я не уверен, что это то, что вы ищете, но я думал, что добавлю его на случай, если кто-то найдет его полезным.
Предположим, что это ваша файловая структура:
/BulutDepoProject
/bin
Main.exe
/FolderIcon
Folder.ico
Main.cs
Вам нужно написать свой путь относительно файла Main.exe
. Итак, вы хотите получить доступ к Folder.ico
, в Main.cs
вы можете использовать:
String path = "..\\FolderIcon\\Folder.ico"
Казалось, это сработало для меня!
Ответ 3
Опустить "~ \":
var path = @"FolderIcon\Folder.ico";
~\
ничего не означает в файловой системе. Единственное место, которое я видел правильно, используется в веб-приложении, где ASP.NET заменяет тильду на абсолютный путь к корню приложения.
Обычно вы можете предполагать, что пути относятся к папке, в которой находится EXE. Кроме того, убедитесь, что изображение указано как "содержимое" и "копировать, если новое" / "копировать всегда" на вкладке свойств в Visual Studio.
Ответ 4
Я тоже встретил ту же проблему, и мне удалось ее преодолеть. Поэтому позвольте мне объяснить шаги, которые я применил. Я объясню это согласно вашему сценарию.
В соответствии с моим методом нам нужно использовать класс "Path" и "Assembly", чтобы получить относительный путь.
Итак, сначала импортируйте System.IO и System.Reflection в использование операторов.
Затем введите следующую строку кода.
var outPutDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly(). CodeBase);
Фактически над данной строкой сохраняется путь к выходному каталогу вашего проекта. (Здесь 'output' ссылается на папку Отладка вашего проекта).
Теперь скопируйте каталог FolderIcon в папку Debug. Затем введите следующую строку.
var iconPath = Path.Combine(outPutDirectory, "FolderIcon\\Folder.ico");
Теперь эта переменная iconPath содержит весь путь к вашему Folder.ico. Теперь все, что вам нужно сделать, это сохранить в строковой переменной. Используйте ниже заданную строку для этого.
string icon_path = new Uri(iconPath ).LocalPath;
Теперь вы можете использовать эту строковую переменную icon_path как ваш относительный путь к значку.
Спасибо.
Ответ 5
Я думаю, что использование этого будет самым легким
new Uri("pack://application:,,/FolderIcon/" + youImageICO);
или этот код будет работать на любом компьютере, если ваша папка находится в вашем корневом проекте, если вы хотите его изменить... просто измените этот раздел @ ".. \"
public static string bingPathToAppDir(string localPath)
{
string currentDir = Environment.CurrentDirectory;
DirectoryInfo directory = new DirectoryInfo(
Path.GetFullPath(Path.Combine(currentDir, @"..\..\" + localPath)));
return directory.ToString();
}