2011-12-01 28 views
5

मैं वर्तमान पथ अपने आवेदन करने के लिए हार्ड-कोड कर रहा हूँ इस प्रकार है:क्या विंडोज़ में सी ++ के लिए एक सरल प्रोग्राम फ़ाइलें/प्रोग्राम फ़ाइलें (x86) निर्देश है?

const char* OriginCopyFile = "C:\\Program Files (x86)\\i-cut\\i-cut\\Origin_copy.txt"; 

इस आवेदन दोनों 32 और 64 प्रणालियों में चल रहा हो जा रहा है। मैं कई फाइलों के साथ पुन: उपयोग करने के लिए फ़ाइल नाम के बिना पथ का पता कैसे लगा सकता हूं और इसे आर्किटेक्चर के बीच पोर्टेबल बना सकता हूं।

उत्तर

6

आप अपने निष्पादन योग्य मार्ग को पाने के लिए GetModuleFileName का उपयोग कर सकते हैं, जहां भी इसे स्थापित किया गया था या बाद में भी स्थानांतरित किया गया था। निष्पादन योग्य नाम को हटाने के लिए आप PathRemoveFileSpec कर सकते हैं (या strchr() और दोस्तों यदि आप Windows 2000 की तुलना में पुराने संस्करणों का समर्थन करना चाहते हैं)।

+1

सही उत्तर के लिए +1 –

5

SHGetSpecialFolderPath(CSIDL_PROGRAM_FILES) कम से कम प्रोग्राम फ़ाइलों निर्देशिका का मार्ग प्रदान करेगा। आपको शेष पथ और फ़ाइल नाम जोड़ने के साथ सौदा करना होगा।

+0

तुम अब भी जहां सॉफ्टवेयर वास्तव में करने के लिए स्थापित किया गया था पता नहीं है। आप जानते हैं कि प्रोग्राम फाइल फ़ोल्डर है, लेकिन हम सभी जानते हैं कि यह सी में स्थापित किया जा सकता है: \ i-cut \ – pezcode

+0

@pezcode: कम से कम शीर्षक के अनुसार (और बाकी के साथ फिट होना प्रतीत होता है) वह मूल रूप से देख रहा है 'प्रोग्राम फ़ाइलें' बनाम 'प्रोग्राम फाइलों (x86) 'के लिए। –

-3

आप इस के लिए वातावरण चरों का उपयोग कर सकते हैं:

#include <stdio.h> 
#include <stdlib.h> 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
char* programFiles = getenv("ProgramFiles(x86)"); 
if (programFiles==NULL) 
{ 
    programFiles = getenv("ProgramFiles"); 
} 

printf(programFiles); 

return 0; 
} 
+0

यह गलत है। हमेशा प्रोग्रामफाइल का उपयोग करें, कभी भी प्रोग्रामफाइल का उपयोग न करें (x86) - WOW64 फाइल सिस्टम पुनर्निर्देशन अनुवाद का ख्याल रखेगा। –

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