`
lovnet
  • 浏览: 6703536 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

教你如何获得可执行程序的执行目录、可执行程序名、可执行程序后缀(C\C++)

 
阅读更多

转载请注明出处:http://blog.csdn.net/bendanban/article/details/7623209

很多童鞋可能遇见过这个问题。下面给大家讲讲哈,希望各位有用。

首先,我们应该明白main函数的参数是什么意思。

int main(int argc, char **argv);

第一个参数说的是,argv中有多少个字符串。第二个参数存放的是一些字符串,这些字符串是系统给出的。其中argc一般情况下会大于等于1 。

如果你不是在命令行中启动的程序,那么通常argc=1 ,并且argv[0]就是可执行程序的全名(包含路径和文件名),例如:C:\test.exe

如果你在命令行启动,那你肯定就明白argv里面存放的是什么了,呵呵。例如你在命令行中输入:{"D:\test.exe" 01.jpg}(你输入的是大括号内的字符串),那么

argv={"D:\test.exe", "01.jpg"};

2、使用argv这个参数获得可执行程序的执行路径等信息:

直接贴程序。

#include <stdio.h> 
#include <Windows.h>
#include <string.h>
int   main(int argc, char *argv[]) 
{
	char drive[4];
	char subdir[MAX_PATH];
	char fn[MAX_PATH]; 
	char exten[MAX_PATH];
	char exe_path[MAX_PATH];

	_splitpath(argv[0], drive, subdir, fn, exten);

	printf("Full file name = %s\n", argv[0]);
	printf("Drive=%s\nSubdir=%s\nfilename=%s\nExtension=%s\n\n",\
		   strlen(drive)==0? "null":drive, \
		   strlen(subdir)==0? "null":subdir,fn,exten);

	sprintf(exe_path, "%s%s", drive, subdir);
	if (strlen(exe_path)==0)
	{
		sprintf(exe_path, ".\\");
	}
	printf("strlen(exe_path)=%d\n", strlen(exe_path));
	printf("exe_path=%s\n", exe_path);	

	// Can we use the path? now test it as followed.
	sprintf(fn, "%stest.log", exe_path);
	FILE *fs = fopen(fn, "w+");
	fprintf(fs, "%s\n", fn);
	fclose(fs);

	getchar();
	return 0; 
}

各位童鞋把程序那会去编译执行下把。

欢迎大家批评指正啊。看完评论下把。让我有点成就感,多多分享啊。。

分享到:
评论

相关推荐

    Windows VC++ 调整进程当前目录为程序可执行文件所在目录

    《Windows VC++ 调整进程当前目录为程序可执行文件所在目录》...得到当前进程可执行文件的路径名,文件名,后缀名。 3.AdjustProcessCurrentDirectory 调整进程当前目录为程序可执行文件所在目录

    LINUX下的C++编译器GCC简介

    gcc 编译器能将C、C++语言源程序、汇程式化序和目标程序编译、连接成可执行文件,如果没有给出可执行文件的名字,gcc将生成一个名为a.out的文件。 在Linux系统中,可执行文件没有统一的后缀,系统从文件的属性来区分...

    C语言/C++常见笔试面试题难疑点汇总

    将一个注释记录放置到对象文件或可执行文件中。 #pragma pack。用来改变编译器的字节对齐方式。 #pragma code_seg。它能够设置程序中的函数在obj文件中所在的代码段。如果未指定参数,函数将放置在默认代码段.text中...

    专业培训c++,望各位有所提高

    例如,编辑后得到一个源程序文件f.cpp,然后在进行编译时再将源程序文件f.cpp输入,经过编译得到目标程序文件f.obj,再将目标程序文件f.obj输入内存,与系统提供的库文件等连接,得到可执行文件f.exe,最后把f....

    计算机程序的正确定义

    是用汇编语言、高级语言等开发编制出来的可以运行的文件,在计算机中称可执行文件(后缀名一般为.exe)。我们玩的游戏一般都是应用程序(但现在后缀名为.swf的Flash影片类的游戏也比较流行)  常见的编程语言  * ...

    C++实现的单源最短路径算法(SSSP).zip

    bin:存放脚本和可执行程序。其中 parallel 和 serial 是串并行的程序,check 后缀的是他们检查正确结果的程序;genUSA-road.ss.pl 生成随机源点,genSources.pl 是前者的附属脚本无需使用,runUSA-road-d(t).ss.pl ...

    C++11的多线程并发编程(一)

    当在windows系统下,鼠标双击某后缀名.exe软件时,通过后台查看,运行的.exe即为可执行程序;而在Linux系统下,这里我实验的是Ubuntu下,通过终端ls -la查看可执行文件获取该文献是都具有x权限,即判断是否为可执行...

    链接器工作过程详细讲解

    大家都知道,从 C/C++ 源程序到可执行文件要经历两个阶段 : (1) 编译器将源文件编译成汇编代码,然后由汇编器 (assembler) 翻译成机器指令 ( 再加上其它相关信息 ) 后输出到一个个目标文件 (object file, VC 的...

    CUDA-Cpp-Makefile:大型 CUDA C++ 程序的 Makefile

    CUDA-Cpp-Makefile 大型 CUDA C++ 程序的 Makefile 原型 混合使用 CUDA 和 C++ 源文件的程序很难使用 Make 进行管理。... 代码的编译和链接的可执行文件 源文件是分开处理的——编辑一个文件只需要重新编

    SCON工具源码

    该 SConstruct 文件指出,它将生成一个名叫 helloscons2 的可执行程序,该可执行程序由 helloscons2.c, file1.c 和 file2.c 组成。注意,多个源文件需要放在一个 Python 列表中。如果你的源程序代码文件很多,有十...

    editplus 代码编辑器html c++ jsp css

    这是因为 EditPlus 的语法是设置文件采用的是绝对路径,而在你设置了语法文件之后,再把程序复制到其它目录,因而导致 EditPlus 无法找到该语法文件。 解决办法: 在主程序目录里,找到 Setting.ini 这是 EditPlus ...

    GCC编译器,LINUX下的编译器

    GCC编译器能将C、C++语言源程序、汇编程序编译、链接成可执行文件。在Linux系统中,可执行文件没有统一的后缀,系统从文件的属性来区分可执行文件和不可执行文件。

    文件编码转换脚本 v2.0 — 解决Source Insight等显示中文乱码

    解决Source Insight 等中文...特点:此脚本会递归地转换所在目录及子目录下的所有 .c、.cpp、.cxx、c++、.h、.hpp、.hxx 等后缀文件(忽略大小写)。 使用方法:拷贝此脚本到目标目录,然后执行即可(须有可执行权限)。

    易语言程序免安装版下载

     静态编译后的易语言可执行程序(exe)和动态链接库(dll),运行时不再依赖任何支持库文件,文件尺寸更小(相对以前的独立编译),PE结构更合理(取消了“易格式体”),加载速度更快,而且有效解决了“病毒误报”和...

    一级计算机基础与Photoshop应用真题十.doc

    A&gt; 只要将高级程序语言编写的源程序文件〔如try.c的扩展名更改为.exe,则它就成为可执 行文件了 B&gt; 高档计算机可以直接执行用高级程序语言编写的程序 C&gt; 高级语言源程序只有经过编译和链接后才能成为可执行程序 D&gt; ...

    MFC的程序框架剖析

    注:MFC中后缀名为Ex的函数都是扩展函数 16、CMainFrame::ShowWindow函数和CMainFrame::UpdateWindow函数 用于显示应用程序框架窗口和更新这个窗口 17、CWinThread::Run函数和CWinThread::PumpMessage函数 用于完成...

    Editplus 3[1].0

    这是因为 EditPlus 的语法是设置文件采用的是绝对路径,而在你设置了语法文件之后,再把程序复制到其它目录,因而导致 EditPlus 无法找到该语法文件。 解决办法: 在主程序目录里,找到 Setting.ini 这是 EditPlus ...

    linux下使用g++编译cpp工程的方法

    1.单个源文件生成可执行程序 下面是一个保存在文件 helloworld.cpp 中一个简单的 C++ 程序的代码: /* helloworld.cpp */ #include int main(int argc,char *argv[]) { std::cout &lt;&lt; "hello, world" &lt;&...

    关于g++和gcc的相同点和区别详解

    1、对于.c后缀的文件,gcc把它当做是C程序;g++当做是C++程序; 2、对于.cpp后缀的文件,gcc和g++都会当做c++程序。 3、编译阶段,g++会调用gcc; 4、连接阶段,通常会用g++来完成,这是因为gcc命令不能自动和c++程序...

    华为java培训讲义

    编译:生成可执行文件,如C++中利用g++生成a.out,效率高,但不跨平台 解释:解释器把源文件逐行解释,跨平台但效率不高 在java中:先编译后解释,把.java文件编译成.class字节码文件 Java源代码文件(.java...

Global site tag (gtag.js) - Google Analytics