[c#] Visual Studio에서 파일의 상대 경로를 얻는 방법은 무엇입니까?

Visual Studio의 솔루션 탐색기에서 추가 한 이미지 파일의 경로를 얻으려고하는데 해당 이미지의 상대 경로를 가져올 수 없습니다. H는 내 프로젝트의 파일 구조입니다.

/ BulutDepoProject
    / FolderIcon
        Folder.ico
        Main.cs

다음과 같은 이미지를 얻을 수 있습니다.

"C:\\Users\\Tolga\\Desktop\\BulutDepo\\BulutDepoProject\\FolderIcon\\Folder.ico"

그러나 다음과 같은 것으로 얻을 수 있어야합니다.

"~\\FolderIcon\\Folder.ico"

나는 그것의 정확한 구문을 모르기 때문에 이미지를 가져올 수 없습니다. 🙁



답변

모든 종류의 외부 파일을 사용하려는 경우 프로젝트 내의 폴더에 파일을 넣는 방법이 있지만 리소스에서 가져 오는 것만 큼 유효하지는 않습니다. 일반 Visual Studio 프로젝트에서는 섹션 Resources.resx아래 에 파일 이 있어야합니다 Properties. 그렇지 않은 경우 자신의 Resource.resx파일을 쉽게 추가 할 수 있습니다 . 그리고 여기에 모든 종류의 파일을 추가하면 여기에서 프로젝트에 리소스 파일을 추가하는 방법을 확인할 수 있습니다 .

프로젝트에 리소스 파일이 있으면 다음과 같이 쉽게 호출 할 수 있습니다.

var myIcon = Resources.MyIconFile;

물론 다음 using Properties과 같은 문을 추가해야합니다 .

using <namespace>.Properties;


답변

나는 조금 늦었고 이것이 당신이 찾고있는 것인지 확실하지 않지만 다른 누군가가 유용하다고 생각할 경우를 대비하여 추가 할 것이라고 생각했습니다.

이것이 파일 구조라고 가정합니다.

/BulutDepoProject
    /bin
        Main.exe
    /FolderIcon
        Folder.ico
        Main.cs

Main.exe파일에 상대적인 경로를 작성해야 합니다. 그래서, 당신은 액세스하려는 Folder.ico사용자에, Main.cs당신은 사용할 수 있습니다 :

String path = "..\\FolderIcon\\Folder.ico"

그것은 나를 위해 일하는 것 같았습니다!


답변

“~ \”생략 :

var path = @"FolderIcon\Folder.ico";

~\파일 시스템 측면에서 의미가 없습니다. 내가 올바르게 사용하는 유일한 곳은 웹 앱에서 ASP.NET이 물결표를 응용 프로그램의 루트에 대한 절대 경로로 대체하는 곳입니다.

일반적으로 경로는 EXE가있는 폴더에 상대적이라고 가정 할 수 있습니다. 또한 Visual Studio의 속성 탭에서 이미지가 “콘텐츠”및 “최신 인 경우 복사”/ “항상 복사”로 지정되어 있는지 확인합니다.


답변

나는 또한 같은 문제를 만났고 그것을 극복 할 수 있었다. 그래서 제가 적용한 단계를 설명하겠습니다. 시나리오에 따라 설명하겠습니다.

내 방법에 따라 상대 경로를 얻으려면 ‘Path’클래스와 ‘Assembly’클래스를 사용해야합니다.

먼저 using 문에서 System.IO 및 System.Reflection을 가져옵니다.

그런 다음 아래 주어진 코드 줄을 입력하십시오.

        var outPutDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly(). CodeBase);

실제로 주어진 행 위에는 프로젝트의 출력 디렉토리 경로가 저장됩니다 (여기서 ‘출력’디렉토리는 프로젝트 의 Debug 폴더를 나타냄).

이제 FolderIcon 디렉토리를 Debug 폴더에 복사하십시오. 그런 다음 아래 주어진 줄을 입력하십시오.

var iconPath = Path.Combine(outPutDirectory, "FolderIcon\\Folder.ico");

이제이 ‘iconPath’변수에는 Folder.ico의 전체 경로가 포함됩니다. 당신이해야 할 일은 그것을 문자열 변수에 저장하는 것입니다. 이를 위해 아래 코드 줄을 사용하십시오.

string icon_path = new Uri(iconPath ).LocalPath;

이제이 icon_path 문자열 변수를 아이콘에 대한 상대 경로로 사용할 수 있습니다.

감사.


답변

이것을 사용하는 것이 가장 쉬울 것이라고 생각합니다

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();
}


답변

Visual Studio의 솔루션 탐색기 창에서 ‘Folder.ico’파일을 클릭하십시오. 그러면 속성 창이 나타납니다. ‘출력 디렉터리로 복사’동작을 ‘최신 인 경우 복사’로 변경합니다. 그러면 Visual Studio가 파일을 출력 bin 디렉터리에 복사합니다.

이제 상대 경로를 사용하여 파일 경로를 얻으려면 다음을 입력하십시오.

string pathToIcoFile = AppDomain.CurrentDomain.BaseDirectory + "//FolderIcon//Folder.ico";

도움이 되었기를 바랍니다.


답변