Path 클래스를 사용하면 상대경로를 절대경로로 바꾸는건 쉬운데..
꺼꾸로 절대경로를 상대경로로 바꾸는 메소드가 없어서 stackoverflow 참고하여 약간 수정하였습니다.
참고 : http://stackoverflow.com/questions/275689/how-to-get-relative-path-from-absolute-path
첫번째 파라메터는 상대경로를 구하기 위해 비교할 경로입니다.
보통 아래와 같은 값을 사용하여 넣어주시면 됩니다.
System.Environment.CurrentDirectory Application.StartupPath
두번째 파라메터는 절대경로입니다.
public string EvaluateRelativePath(String mainDirPath, String absoluteFilePath)
{
// 입력값 검증
if (String.IsNullOrEmpty(mainDirPath)) throw new ArgumentNullException("mainDirPath 입력값이 null 또는 공백입니다.");
if (String.IsNullOrEmpty(absoluteFilePath)) throw new ArgumentNullException("absoluteFilePath 입력값이 null 또는 공백입니다.");
if (Path.GetPathRoot(mainDirPath) != Path.GetPathRoot(absoluteFilePath)) throw new ArgumentException("입력값의 루트가 다르므로 처리할 수 없습니다.");
if (Path.IsPathRooted(mainDirPath) == false) throw new ArgumentException("mainDirPath 이 절대경로가 아닙니다.");
if (Path.IsPathRooted(absoluteFilePath) == false) throw new ArgumentException("absoluteFilePath 이 절대경로가 아닙니다.");
// 입력값 보정, C:test 일때 test가 파일인지 디렉토리인지 애매하다
mainDirPath = mainDirPath.Trim();
absoluteFilePath = absoluteFilePath.Trim();
if (Directory.Exists(mainDirPath + Path.DirectorySeparatorChar)) mainDirPath = mainDirPath + Path.DirectorySeparatorChar;
if (Directory.Exists(absoluteFilePath + Path.DirectorySeparatorChar)) absoluteFilePath = absoluteFilePath + Path.DirectorySeparatorChar;
// 상대 경로 추출
Uri mainDirUri = new Uri(mainDirPath);
Uri absoluteFileUri = new Uri(absoluteFilePath);
Uri relativeUri = mainDirUri.MakeRelativeUri(absoluteFileUri);
String relativePath = Uri.UnescapeDataString(relativeUri.ToString());
// 리턴
return relativePath.Replace('/', Path.DirectorySeparatorChar);
}



