2011-12-01 16 views
5

Attualmente sto codificare il percorso per la mia domanda come segue:Esiste una semplice direttiva Programmi/Programmi (x86) per C++ in Windows?

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

Questa applicazione sta per essere in esecuzione in entrambi i 32 e 64 sistemi. Come posso rilevare il percorso senza il nome del file per riutilizzarlo con diversi file e renderlo portabile tra l'architettura.

risposta

6

È possibile utilizzare GetModuleFileName per ottenere il percorso dell'eseguibile, dovunque sia stato installato o spostato in seguito. È quindi possibile PathRemoveFileSpec rimuovere il nome dell'eseguibile (o strchr() e gli amici se si desidera supportare versioni precedenti rispetto a Windows 2000).

+1

+1 per la risposta corretta –

5

SHGetSpecialFolderPath(CSIDL_PROGRAM_FILES) darà almeno il percorso alla directory dei file di programma. Dovrai occuparti di aggiungere il resto del percorso e il nome del file.

+0

Ancora non si sa dove il software è stato effettivamente installato. Tutto quello che sai è la cartella dei file di programma, ma per quanto ne sappiamo potrebbe essere installato in C: \ i-cut \ – pezcode

+0

@pezcode: Almeno secondo il titolo (e il resto sembra adattarsi a questo), sta praticamente cercando per 'Program Files' contro' Program files (x86) '. –

-3

È possibile utilizzare variabili di ambiente per questo:

#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

Questo è sbagliato. Usa sempre ProgramFiles, non utilizzare mai ProgramFiles (x86) - Il reindirizzamento del file system WOW64 si occuperà della traduzione. –

Problemi correlati