2017-11-13 3 views
0

주어진 파일이 있는지 검색하려고합니다. 예를 들어,이 디렉토리에서 Joystick.png를 찾고 있다고 가정 해 봅시다. F : \ FrontEnd \ Themes \ Custom \ Images \ Platform \ Controller \ Joystick.pngAssembly.GetEntryAssembly() 사용 파일이 있는지 감지 할 위치

응용 프로그램이 다음과 같은 이유로 하드 코딩 할 수 없습니다. 다른 곳에 설치하십시오. 그러나 디렉토리 구조는 변경되지 않습니다.

나는 WPF에 이미지 경로를 보내려면이

string path = $"pack://siteoforigin:,,,/Themes/Custom/Images/Controls/{game.Platform}/{controller}.png"; 

을 사용하고있었습니다하지만 난 File.Exists에이 같은 변수를 전달할 수없는 leanr 왔어요. 그래서 대안을 찾아야했습니다.

나는이 발견했습니다 : F가 : \ 프런트 엔드 \ FrontEnd.exe이

그래서 제 질문은, 어떻게이 var exists 그래서 그 경기입니다 수정 않아도되는 날이 결과를 얻을 수

string exists = Assembly.GetEntryAssembly().Location; 

var path의 구조?

+0

'Assembly.GetEntryAssembly(). 위치 '는 패키지 형식의'/ Themes/...'앞에있는 모든 것을 제공합니다. –

+0

나는 그 결과를 게시하기도했다. FrontEnd.exe를 나머지 파일 경로로 대체하려고합니다. – Sweepster

답변

1

당신은 경로 문자열을 조작 할 System.IO.Path의 다른 멤버를 사용할 수 있습니다.

var exePath = @"F:\FrontEnd\FrontEnd.exe"; 
var filePath = @"/Themes/Custom/Images/Controls/{game.Platform}/{controller}.png"; 
var relPath = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(exePath),filePath); 
var packPath = @"pack://siteoforigin:,,," + relPath; 
0

이것은 어셈블리의 루트를 제공 "themes\\custom\\images\\controls\\pc"$"themes\\custom\\images\\controls\\{platform}\\{imagename}"

에 당신은 변경할 수 있습니다이

var path = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); 

    var pathtoCombine = Path.Combine(path, "themes\\custom\\images\\controls\\pc"); 

    var image = Path.Combine(pathtoCombine, "image.txt"); 
    var exists = File.Exists(image); 

을보십시오. 예를

C의 : 사용자 \\ 문서 비주얼 스튜디오 2015 \ \ 프로젝트 \ \ StringSandbox \ StringSandbox \ 빈 \ 디버그

+0

하지만 어셈블리의 루트를 원하지 않습니다. path 변수의 파일 경로와 일치 시키려합니다. – Sweepster

+0

png를 콘텐츠로 표시하고 '출력 디렉토리로 복사'-> 항상 복사 –

+0

을 선택하지만 이미지 자체가 존재하지 않을 수 있습니다. 이미지 파일의 이름은 사용자가 수정할 수있는 데이터베이스의 값을 기반으로합니다. 따라서 이미지가 아직 존재하지 않거나 존재하지 않을 수도 있으며 존재하지 않는 경우 프로그램을 중단시키지 않을 것입니다. 그래서 코드를 실행하기 전에 파일 경로가 유효한지 여부를 감지해야합니다. 내 DLL에 이미지를 추가하면 전체 점을 패배 – Sweepster