Как получить относительный путь к файлу в визуальной студии?

Я пытаюсь получить путь к файлу изображения, который я добавил в 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();
}