2011-12-01 43 views
5

Tôi hiện đang cứng mã hóa đường dẫn đến ứng dụng của tôi như sau:Có một tệp Chương trình/Tệp Chương trình (x86) đơn giản chỉ thị cho C++ trong các cửa sổ không?

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

Ứng dụng này sẽ được chạy trong cả hai 32 và 64 hệ thống. Làm thế nào tôi có thể phát hiện đường dẫn mà không có tên tập tin để tái sử dụng nó với một số tập tin và làm cho nó di động giữa kiến ​​trúc.

Trả lời

6

Bạn có thể sử dụng GetModuleFileName để nhận đường dẫn đến tệp thực thi của mình, bất cứ nơi nào được cài đặt hoặc thậm chí được di chuyển sau. Sau đó, bạn có thể PathRemoveFileSpec để xóa tên thực thi (hoặc strchr() và bạn bè nếu bạn muốn hỗ trợ các phiên bản cũ hơn Windows 2000).

+1

+1 cho câu trả lời đúng –

5

SHGetSpecialFolderPath(CSIDL_PROGRAM_FILES) ít nhất sẽ cung cấp đường dẫn đến thư mục tệp chương trình. Bạn sẽ phải đối phó với việc thêm phần còn lại của đường dẫn và tên tệp.

+0

Bạn vẫn không biết nơi mà các phần mềm đã thực sự được cài đặt để. Tất cả những gì bạn biết là thư mục tệp chương trình, nhưng đối với tất cả chúng ta biết nó có thể được cài đặt trong C: \ i-cut \ – pezcode

+0

@pezcode: Ít nhất là theo tiêu đề (và phần còn lại dường như phù hợp với điều này) cho 'Program Files' và' Program files (x86) '. –

-3

Bạn có thể sử dụng các biến môi trường cho việc này:

#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

Điều này là sai. Luôn luôn sử dụng ProgramFiles, không bao giờ sử dụng ProgramFiles (x86) - WOW64 chuyển hướng hệ thống tập tin sẽ chăm sóc bản dịch. –

Các vấn đề liên quan