![](/img/trans.png)
[英]Error When Compiling a Simple C Program File in Windows 10 CMD Prompt Using MinGW (gcc: error: No such file or directory)
[英]How to get AppPath to Executable file's directory using C language on Windows (using MinGW gcc )
我的可執行文件位於此處 - > D:\\ Examples \\ C_Pro \\ newApp.exe此外,“C_Pro”文件夾中還包含多個文件(file1.txt,file2.txt,file44.exe,newApp.c)
在我的newApp.c文件中,我包含一個ShellExecute函數來在這樣的文件夾中執行“file44.exe”文件 - > ShellExecute(NULL,“open”,“D:\\ Examples \\ C_Pro \\ file44.exe”,NULL ,NULL,1)
這樣一切都正常工作..
我正在談論App中的AppPath
但是我想在不同的PC上運行這個newApp.exe所以我想用另一個pc中包含“newApp.exe”文件的路徑替換“”D:\\ Examples \\ C_Pro \\“這個。(比如C) :\\軟件\\)
我使用GetModuleFileName函數獲取路徑,但它包含newApp.exe部分,我只想到新目錄PathRemoveFileSpec函數不起作用的Point。
以及GetModuleFileName的返回路徑,如 - > D:\\ Examples \\ C_Pro \\ newApp.exe,但是當我們將一些路徑放入ShellEcxecute時,需要雙重shalse(空格序列),如下所示 - > D:\\ Examples \\ C_Pro \\
我怎樣才能擺脫這個問題。
實際代碼snippt是這個......
int main()
{
ShellExecute(NULL,"open","D:\\Softwares\\TypingMaster700.exe",NULL,NULL,SW_SHOWNORMAL);
}
但我想這樣做。 (這是虛擬的,這里“some_Funtion”表示用於解釋目的的虛函數。
int main()
{
char *dirPath = some_Function(a,x,d);
char *fullPath;
fullPath = strcat(dirPath,"\\TypingMaster700.exe");
ShellExecute(NULL,"open",fullPath,NULL,NULL,SW_SHOWNORMAL);
}
在C標准中沒有標准地支持獲取可執行文件所在目錄的絕對路徑,因為並非所有運行程序的系統都支持這樣的概念。 然而在實踐中,它具有理想的功能。 簡而言之:好問題。
不幸的是,它不是那么簡單,如果使用execl
cs調用你的程序,它甚至可能是不可能的。 您將必須重新運行shell以確定要運行的應用程序,並以aruls argv[0]
開頭,因為paulsm4也可以。 在Linux上,如果路徑以/
開頭,則argv[0]
是可執行文件的絕對路徑,您可以通過在末尾剝離可執行文件名來找到該目錄。 在Windows上,你將不得不檢查\\
和可能的驅動器號,我不確定。 我們將在其余部分假設Linux,只需讀取\\
為每個/
將其應用於Windows。
如果argv[0]
不是上面的絕對路徑,你應該檢查它是否包含任何/
根本,因為如果它,它必須是相對於getcwd
如paulsm4所描述的。
如果argv[0]
不包含任何/
,則必須運行PATH
環境變量才能找到包含argv[0]
的第一個目錄。
如果全部失敗,則通過execl
或其中一個朋友調用了您的應用程序,並且他們對可執行文件的位置並不誠實。 你運氣不好。
這樣的東西適用於Windows:
#include <stdio.h>
#include <stdlib.h>
int
main (int argc, char *argv[])
{
char buff[255];
getcwd (buff, sizeof (buff));
printf ("path=%s\\%s\n", buff, argv[0]);
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.