2012-03-16 15 views
9

डेल्फी में, मैं एक HTTP अनुप्रयोग, या एक वेब सर्वर के बजाय बना रहा हूँ। यह अनिवार्य रूप से एक पूरी वेबसाइट है जो एक एकल EXE फ़ाइल में बनाई गई है। जिन फ़ाइलों को मैं एम्बेड कर रहा हूं उनमें एचटीएमएल, जेएस, सीएसएस, एसडब्ल्यूएफ, पीएनजी, एक्सएमएल इत्यादि शामिल हैं। संसाधन नाम मूल फ़ाइल नाम के समान हैं, ._ के साथ बदल दिया गया है। अंत में, EXE के अंदर एम्बेडेड लगभग 40-60 फाइलें होंगी।मैं कैसे जांचूं कि एक एम्बेडेड संसाधन मौजूद है या नहीं?

समस्या यह है कि मैं प्रत्येक व्यक्तिगत फ़ाइल को कोड लपेटना नहीं लिखना चाहता हूं। अभी, मैं प्रत्येक संसाधन के लिए निरंतर घोषणा कर रहा हूं, और TResourceStream का उपयोग कर संसाधन प्राप्त करते समय उस स्थिरता का उपयोग कर रहा हूं। HTTP अनुरोध किसी विशेष फ़ाइल के लिए पूछ रहा है, और चूंकि मेरे पास फाइलों का एक समूह होगा, इसलिए मैं प्रत्येक फ़ाइल को संभालने का एक अलग तरीका नहीं चाहता हूं। इसके अलावा, भविष्य में, जब मैं एम्बेडेड करने के लिए एक नई फ़ाइल जोड़ता हूं, तो मुझे इसे अपने संसाधन स्क्रिप्ट (.rc) में जोड़ना होगा। तो मैंने संसाधन के नाम से अनुरोध किए गए फ़ाइल नाम को स्वचालित रूप से हल करने के लिए अपना तंत्र बदलने का फैसला किया। उदाहरण के लिए, /Home.HTML को HOME_HTML पर हल किया गया है जो एम्बेडेड संसाधन का नाम माना जाता है। मुझे यह जांचने की आवश्यकता है कि लोड करने से पहले ऐसा संसाधन मौजूद है या नहीं।

मैं इसे लोड और किसी भी अपवाद को पकड़ने के लिए की कोशिश कर सकते, लेकिन अगर संसाधन मौजूद नहीं है इस डिबग में त्रुटियों का उत्पादन होगा। मैं try..except का उपयोग किए बिना ऐसे चेक करने के बारे में कैसे जाउंगा?

+5

क्यों आपको लगता है कि क्या करना चाहते हैं की तरह कुछ का उपयोग कर सकते हैं? फ़ाइल सिस्टम से * वेब सर्वर को पढ़ने के प्रमुख फायदों में से एक यह है कि आप सर्वर को स्वयं को बदलने के बिना अपनी साइट पर सामग्री को बदल सकते हैं। अभी, अगर आपको फ़ाइल बदलने या नई फाइल जोड़ने की ज़रूरत है, तो आपको एक नया सर्वर बनाना होगा, मौजूदा एक को नीचे ले जाना होगा, नए को कॉपी करना होगा, और इसे पुनरारंभ करना होगा। यह खराब दिखता है, भले ही डाउनटाइम अपेक्षाकृत छोटा हो ... –

+0

@MasonWheeler मुझे वास्तव में सैकड़ों हैं, वास्तव में लगभग एक हजार अन्य फाइलें जो ऐप गतिशील रूप से उत्पन्न होगी। एम्बेडेड सामान केवल महत्वपूर्ण चीजें हैं जो कभी नहीं बदलेगी। उपरोक्त वर्णन सिर्फ एक नमूना था। मैं ऐसा करने का कारण वितरण के लिए है। लक्ष्य केवल इस एकल EXE को किसी को भेजने में सक्षम होना है और उन्हें तुरंत चलाने में सक्षम होना है। –

+1

क्या मुझे डाउनवोट के लिए स्पष्टीकरण मिल सकता है? या यह सिर्फ सामान्य डेल्फी नफरत में से एक है? –

उत्तर

18

आप FindResource एपीआई,

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

+1 और स्वीकार किया गया, सही काम करता है। –

2

Win32 API FindResource() फ़ंक्शन का उपयोग करें।

संबंधित मुद्दे

 संबंधित मुद्दे