2012-03-16 4 views
9

델파이에서는 HTTP 애플리케이션 또는 웹 서버를 구축하고 있습니다. 그것은 본질적으로 하나의 EXE 파일에 내장 된 전체 웹 사이트입니다. 포함하고있는 파일에는 HTML, JS, CSS, SWF, PNG, XML 등이 포함됩니다. 리소스 이름은 .이 대체 된 _ 인 원본 파일 이름과 동일합니다. 결국 EXE 파일에 약 40-60 개의 파일이 임베디드됩니다.포함 된 리소스가 있는지 여부를 어떻게 확인합니까?

문제는 각 개별 파일을 래핑하는 코드를 작성하고 싶지 않기 때문입니다. 지금은 각 리소스에 대해 상수를 선언하고 TResourceStream을 사용하여 리소스를 가져올 때 해당 상수를 사용하고 있습니다. HTTP 요청은 특정 파일을 요구하고 있으며, 많은 파일을 갖기 때문에 각 파일을 별도로 처리하는 방법을 원하지 않습니다. 또한 향후에 새 파일을 추가 할 때 내 리소스 스크립트 (.rc)에 추가해야합니다. 그래서 자원 이름으로 요청 된 파일 이름을 자동으로 해결하도록 메커니즘을 변경하기로 결정했습니다. 예를 들어 /Home.HTML은 포함 된 리소스의 이름으로 간주되는 HOME_HTML으로 확인됩니다. 로드하기 전에 그러한 리소스가 있는지 확인해야합니다.

나는 로드 및 예외을 잡으려고을 시도 할 수 있지만, 자원이 존재하지 않는 경우이 디버그 오류를 생성 할 것입니다. try..except을 사용하지 않고 이러한 점검을 수행하려면 어떻게해야합니까?

+5

왜 당신이 그렇게하고 싶어 같은 것을 사용할 수 있습니까? 파일 시스템에서 * 읽는 웹 서버를 갖는 주요 장점 중 하나는 서버 자체를 변경하지 않고도 사이트의 내용을 변경할 수 있다는 것입니다. 현재 파일을 변경하거나 새 파일을 추가해야하는 경우 새 서버를 만들고 기존 서버를 다운 받아 새 서버를 복사 한 다음 다시 시작해야합니다. 그것은 다운 타임이 상대적으로 짧은 경우에도 나쁜 것처럼 보입니다. –

+0

@MasonWheeler 저는 실제로 앱이 동적으로 생성 할 거의 천 개의 다른 파일을 수백 가지 가지고 있습니다. 임베디드 된 것들은 절대 바뀌지 않을 중요한 것입니다. 위의 설명은 단지 예제 일뿐입니다. 제가이 일을하는 이유는 배급 때문입니다. 목표는이 단일 EXE를 다른 사람에게 보내고 즉시 실행할 수있게하는 것입니다. –

+1

downvote에 대한 설명을 알려주시겠습니까? 아니면 평범한 델파이 싫어 하나입니까? –

답변

18

당신은 FindResource API,

if(FindResource(hInstance, PChar(ResourceName), RT_RCDATA) <> 0)then begin 
    // load the resource 
end 
+0

+1 및 동의, 완벽하게 작동합니다. –

2

Win32 API FindResource() 함수를 사용하십시오.

관련 문제