2014-05-18 2 views
6

Visual Studio의 프로젝트 폴더에 이미지 파일이 있고 내 exe 파일에 포함되도록 "리소스"작업을 설정하도록 설정되어 있습니다. xaml에서이 파일에 아무 문제없이 연결할 수 있습니다 (예 : < .Image Source = "images/myimage.png">).리소스 파일이 존재하는지 확인

그러나 File.exists ("images/myimage.png")를 사용하여 파일의 존재를 확인하려고하면 항상 false가 반환됩니다. 여기서 내가 뭘 잘못하고 있니?

+2

을 존재하는 경우 잘못된 길. – CodeCaster

+0

틀렸어. URL "images/myimage.png"가 리소스를 가리키지 않아 파일을 가리 킵니다. pack : // scheme을 사용하여 자원을 참조하십시오. – torvin

+0

File.Exists ("pack : //images/myimage.png"); 오류 발생 : 지정된 경로 형식이 지원되지 않습니다. – user3595338

답변

6

출력 폴더에 번들을 추가하지 않으려면 아무 것도 할 필요가 없습니다. 그것은 확인하지 않아도 귀하의 exe로 빌드입니다. 항상 사실 일 것입니다.


좋아요, 확인하고 싶은 임베디드 리소스의 이름을 동적으로 작성했기 때문에 알았습니다.

는 여기를 참조하십시오 : WPF - check resource exists without structured exception handling

그들은 기본적으로 당신이 사용할 수있는 Assembly.GetExecutingAssembly().GetManifestResourceNames()

에 대해 확인 출발점으로. 그러나 리소스 이름은 이미지/myimage.png이 아니지만 YourApp.images.myimage.png과 같은 네임 스페이스에서 구성됩니다. 그 대답에서 작성된 resourceNames 배열의 내용을 살펴볼 수 있습니다.

+0

실제로 여기에 해당하지 않습니다. 파일 경로가 다음과 같이 표시 될 수 있도록 변수와 파일을 연결합니다. "images /"+ filename + ".png", 해당 파일이 존재하지 않을 수도 있습니다. 이것을 확인하기 위해 대신 "images/default.png"경로를 제공 할 수 있습니다. – user3595338

+0

알겠습니다. 이해하고 업데이트했습니다. – ZoolWay

2

"출력에 복사"속성을 "항상"으로 설정 했습니까? 올바른 경로를 사용하는지 확인하십시오. 실행중인 어셈블리의 경로는 다음 코드를 사용하여 검색 할 수 있습니다.

private string GetExecutingAssemblyPath() 
{ 
     string codeBase = Assembly.GetExecutingAssembly().CodeBase; 
     UriBuilder uri = new UriBuilder(codeBase); 
     string path = Uri.UnescapeDataString(uri.Path); 
     return Path.GetDirectoryName(path); 

} 

건배.

+1

"Copy to the Output"속성을 "Always"로 설정 했습니까? 아니요, 파일을 디렉토리에 분리하지 않으려 고합니다.이 파일을 내 exe 파일에 직접 포함시키고 거기에 존재하는지 확인하고 싶습니다. – user3595338

0

Xamarin.Forms 작업 코드에서

, 수표 (여기 https://developer.xamarin.com/guides/xamarin-forms/user-interface/images/#Embedded_Images 설명) 자동으로 생성 된 파일 이름은 공유 프로젝트에 포함 된 리소스에 당신은 아마에서 찾고

 var assembly = typeof(App).GetTypeInfo().Assembly; 
     var AssemblyName = assembly.GetName().Name; 
     var generatedFilename = AssemblyName+".Images.flags.flag_" + item.CountryCode?.ToLower() + @".png"; 

      bool found = false; 
      foreach (var res in assembly.GetManifestResourceNames()) 
      { 
       if (res == generatedFilename) 
       { 
        found = true; 
        break; 
       } 
      } 

      if (found) UseGeneratedFilename(); 
      else UseSomeOtherPlaceholderImage; 
관련 문제