在WinMain()函数中确定程序执行目录

文章介绍了如何在WinMain函数中确定程序执行目录,主要涉及三个函数:GetModuleFileName用于获取当前进程的全路径,strrchr查找路径中的最后一个\或/,_chdir改变当前工作目录。通过这些函数,可以提取出程序的执行路径并进行相关操作。
摘要由CSDN通过智能技术生成

目录

1、在WinMain()函数中确定程序执行目录

1.1 解析:GetModuleFileName(NULL, szPath, _MAX_PATH))

函数参数

函数返回值

头文件

实例源代码

1.2 解析:strrchr(szPath, '\\')

函数类型

函数简介

1.3 解析:_chdir(szPath);


1、在WinMain()函数中确定程序执行目录

 char szPath[_MAX_PATH] = {0};     //定义一个char类型的数组szPath

    if (0 != GetModuleFileName(NULL, szPath, _MAX_PATH))

    {

        char* str = strrchr(szPath, '\\');

        if (NULL == str)

        {

            str = strrchr(szPath, '/');

        }

        if (NULL != str)

        {

            *str = '\0'; //去掉后面的文件名称,得到完整路径:从后向前查找字符'\',并将其后字符置为0,作为字符串结尾。

            _chdir(szPath);

        }

    }

1.1 解析:GetModuleFileName(NULL, szPath, _MAX_PATH))

函数

获取当前进程已加载模块的文件的完整路径,该模块必须由当前进程加载。

如果想要获取另一个已加载模块的文件路径,可以使用GetModuleFileNameEx函数。

函数原型:

DWORDGetModuleFileName(

HMODULE  hModule,

LPTSTR  lpFilename,

DWORD  nSize

);

函数参数

HMODULE hModule 装载一个程序实例的句柄。如果该参数为NULL,该函数返回该当前应用程序全路径。

LPTSTR lpFileName 是你存放返回的名字的内存块的指针,是一个输出参数

DWORD nSize,装载到缓冲区lpFileName的最大值

函数返回值

如果返回为成功,将在lpFileName的缓冲区当中返回相应模块的路径,如果所设的nSize过小,那么返回仅按所设置缓冲区大小返回相应字符串内容。

如果函数失败,返回值将为0,利用GetLastError可获得异常代码。

头文件

windows.h

实例源代码

#include <windows.h>

#include <stdio.h>

BOOL CreateSampleService()

{

    TCHAR szPath[MAX_PATH];

    if( !GetModuleFileName( NULL, szPath, MAX_PATH ) )

    {

        printf("GetModuleFileName failed (%d)\n", GetLastError());

        return FALSE;

    }

return TRUE;

}

/*

如果想获得某个正在运行的EXE或者DLL的全路径可以这样写代码

GetModuleFileNameEx(hProcess,hInst,lpFile,MAX_PATH);//注意下缓冲区就行了。

*/

1.2 解析:strrchr(szPath, '\\')

函数类型

strrchr() 函数(在php中)查找字符在指定字符串中从右面开始的第一次出现的位置,如果成功,返回该字符以及其后面的字符,如果失败,则返回 NULL。与之相对应的是strchr()函数,它查找字符串中首次出现指定字符以及其后面的字符。

函数简介

函数名称: strrchr

函数原型:char *strrchr(const char *str, int c);

所属库: string.h

函数功能:查找一个字符c在另一个字符串str中末次出现的位置(也就是从str的右侧开始查找字符c首次出现的位置),并返回这个位置的地址。如果未能找到指定字符,那么函数将返回NULL。使用这个地址返回从最后一个字符c到str末尾的字符串。

#include <string.h>

#include <stdio.h>

int main(void)

{

    char string[20];

    char *ptr, c = 'r';

    strcpy(string, "There are two rings");

    ptr = strrchr(string, c);

    if (ptr)

        printf("The character %c is at position: %s\n", c, ptr);

    else

        printf("The character was not found\n");

    return 0;

strrchr返回的指针应当指向"rings"里的'r',而不是“There”或"are"里的'r'。

运行结果是:The character r is at position:rings

ptr = strrchr(string, c); //返回的指针地址,赋值给ptr,代表c的地址,打印的时候ptr又代表字符串

1.3 解析:_chdir(szPath);

chdir 是C语言中的一个系统调用函数(同cd),用于改变当前工作目录,其参数为Path 目标目录,可以是绝对目录或相对目录。

功 能:更改当前工作目录。

参 数:Path 目标目录,可以是绝对目录或相对目录。

返回值:成功返回0 ,失败返回-1

#include<stdlib.h>

intmain(intargc,char*argv[])

{

charpath[_MAX_PATH];

_getcwd(path,_MAX_PATH);

printf("当前工作目录:\n%s\n",path);

if((_chdir("d:\\visualc++"))==0)

{

printf("修改工作路径成功\n");

_getcwd(path,_MAX_PATH);

printf("当前工作目录:\n%s\n",path);

}

else

{

perror("修改工作路径失败");

exit(1);

}

return0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值