[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";
도움이 되었기를 바랍니다.