2 min read

C# 상대경로 사용하기

디렉토리가 바뀌면 프로그램이 작동을 안하는 걸 프로그램이라 부를수는 없는 관계로
왠만해서는 상대경로로 프로그램을 작성하려 하는데 이상하게 C#에서
System.Drawing.Image.FromFile()함수는 상대경로가 안되더라
그래서 절대경로로 나타낼때 현재 프로그램이 돌아가는 위치를 알게 해주는 방법을 알아냈다.

이걸 공유해보고자 한다.

Environment.CurrentDirectory

기본적으론 이 객체?를 통해 위치에 접근할 수 있다.

근데 얘로 접근하면 절대경로는 잘 나오지만 뒤에 꼭 bin/debug나 bin/release 등 이상한 찌꺼기 경로가 붙어서

탐색을 힘들게 한다.

Directory.GetParent(Environment.CurrentDirectory).Parent.FullName

이를 해결하기 위해 이렇게 작성해주었다.
먼저 bin/debug 경로가 모두 포함된 문자열을 받는데,
문자열에서 부모경로를 찾아주는 Directory.GetParent()함수를 이용해
문자열이 아니도록 형변환 한 뒤에, 1차로 부모객체를 찾아준다 [지금은 bin/]
그 형변환된 객체의 부모객체를 찾아주는 .Parent ,
그리고 부모객체를 풀네임으로 반환시키는 .FullName까지 해주면

최종적으로는 프로젝트의 메인 디렉토리 위치를 가리키게 되고,

Directory.GetParent(Environment.CurrentDirectory).Parent.FullName + "/Resources/Chibi/" + CharName + ".png"

이제 이 뒤에 문자열등으로 폴더에 접근해 이미지 등의 파일들을 꺼내오면 된다.

내 디렉토리 구조는 위와 같이 되어있고,
메인 디렉토리 위치를 가리키면 Helltaker/ 까지 가리킬 것이다.

추천 글

featured