2017-03-10 10 views
0

나는 다음과 같은 기본 코드가 있습니다오류는

procedure TForm4.shrek1Click(Sender: TObject); 
begin 
    shrek1.Picture.LoadFromFile('donkey.jpeg'); 
end; 
shrek1TImage이다

donkey.jpeg가 이미지를 내가 클릭하면 shrek1로드 할.

donkey.jpeg 은 문자 그대로 모든 기타 관련 프로젝트 파일과 동일한 디렉토리에있는, 아직 내가 코드를 실행하려고하면 오류 얻을 수있다 :

Exception class EFOpenError with message 'Cannot open file "\(removed directory for privacy)\donkey.jpeg". The system cannot find the file specified

내가 잘못하고있는 중이 야 무엇을?

+1

를 상대 경로에 의존하지 마십시오. 전체 경로를 전달하십시오. 그리고 네가 맞는지 확인해. 파일이 존재하지 않는다고 시스템이 알리는 경우이를 신뢰하십시오. –

+0

절대 경로를 지정하지 않으면 실행 파일은 실행 파일과 동일한 경로의 이미지를 찾습니다. 파일이 Win32 \ Debug (또는 빌드에 따라 Win32 \ Release) 폴더에 존재하는지 검사 할 수 있습니다.이 폴더는 실행 파일이 상주 할 폴더입니다. 이를 확인하려면 donkey.jpeg 파일을 Debug/Release 폴더에 복사 해보십시오. – Rohit

+0

@Rohit : "* 절대 경로를 제공하지 않으면 실행 파일은 실행 파일과 동일한 경로의 이미지를 찾습니다."- ** 오직 ** 호출 프로세스의 현재 작업 디렉토리 만이 실행 가능 경로입니다. 그것은 보장되지 않습니다. –

답변

3

항상 절대 경로를 사용하십시오. 상대 경로는 호출 프로세스의 현재 작업 디렉토리와 관련이 있으며 프로세스의 수명 기간 동안 값을 변경할 수 있으며 일반적으로 사용자가 기대하는 것은 아닙니다. jpg이 파일이 당신의 EXE 같은 폴더에있는 경우

대신이 작업을 수행 할 수 있습니다

var 
    AppPath: string; 

procedure TForm4.shrek1Click(Sender: TObject); 
var 
    FileName: string; 
begin 
    FileName := AppPath+'donkey.jpeg'; // <-- make sure this path is accurate! 
    shrek1.Picture.LoadFromFile(FileName); 
end; 

initialization 
    AppPath := IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName)); 
+0

불행히도 여전히 작동하지 않습니다. 오류 메시지는 프로그램이 정확한 주소를 찾고 파일이 확실히 존재하지만 아직 "파일을 찾을 수 없습니다 지정된 ", JPEG 파일이 지원되지 않거나 뭔가있을 수 있습니까? – TheMagicalMuffinMan

+0

@TheMagicalMuffinMan : JPG가 지원됩니다 ('uses' 절에'jpeg' 단위가 있으면, 다른 오류가 발생하지 않을 것입니다). OS가 거짓말하지 않습니다. 파일이 존재하지 않는다고 말하면 실제로 존재하지 않습니다. 파일을 올바른 경로에서로드하지 않았습니다. 질문에 표시된 오류 메시지의 경로는'\\'로 시작합니다. 오류 메시지를 편집 할 때 수동으로 수행 했습니까? –

+0

나는 수동으로 그랬다. – TheMagicalMuffinMan