CreateDirectory GetCurrentDirectory 和SetCurrentDirectory

CreateDirectory

函数功能

创建一个新目录

函数声明

BOOL CreateDirectory(

LPCTSTR lpPathName,

LPSECURITY_ATTRIBUTES lpSecurityAttributes

);

第一个参数(第一种情况绝对路径)

lpNewDirectory String,新目录的名字。举例:LPCSTR str = "c:\\TEST"

第一个参数(第二种情况当前目录)

lpNewDirectory String,新目录的名字。举例:LPCSTR str = "TEST"

第二个参数

lpSecurityAttributes SECURITY_ATTRIBUTES,这个结构定义了目录的安全特性——如果操作系统支持的话,安全属性,一般设置为NULL即可

返回值

Long,如果正确创建,返回值为1,如果没有正常创建文件夹,则返回0。会设置GetLastError

注意:

特别的:该函数每次调用时都只能创建一级文件夹,即文件夹中不能再包含子文件夹

当希望创建含有子文件夹的文件夹时,可以先使用该函数创建一级文件夹,然后再使用该函数在一级文件夹下创建子文件夹。如:

希望创建:d:\\TEST\\temp

则:

 	LPCSTR str = "c:\\TEST";
    CreateDirectory(str, NULL);
    LPCSTR std = "c:\\TEST\\temp";
    CreateDirectory(std, NULL);

代码实现

绝对路径

 LPTSTR szDirPath = LPTSTR("c:\\dog");
    if (!CreateDirectory(szDirPath, NULL)) {
        LPCSTR a = "创建失败";
        LPCSTR  b = "再接再厉";
        MessageBox(NULL,a,b,MB_OK);
        return 0;
   }
    LPCSTR a = "创建成功";
    LPCSTR  b = "厉害";
    MessageBox(NULL, a, b, MB_OK);

    LPCSTR str = "c:\\TEST";
    CreateDirectory(str, NULL);
    LPCSTR std = "c:\\TEST\\temp";
    CreateDirectory(std, NULL);
    

当前目录

  LPCSTR str1 = "TEST";
    CreateDirectory(str1, NULL);
    if (!CreateDirectory(szDirPath, NULL)) {
        LPCSTR a = "创建失败";
        LPCSTR  b = "再接再厉";
        MessageBox(NULL, a, b, MB_OK);
        return 0;
    }
    LPCSTR a = "在当前目录创建成功";
    LPCSTR  b = "厉害";
    MessageBox(NULL, a, b, MB_OK);

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

GetCurrentDirectory

函数功能

在一个缓冲区中装载当前目录

函数声明

因为此时我是用的是多字节字符集,所以 GetCurrentDirectory自动转变为 GetCurrentDirectoryA

GetCurrentDirectoryA(
    _In_ DWORD nBufferLength,
    _Out_writes_to_opt_(nBufferLength,return + 1) LPSTR lpBuffer
    );

第一个参数

nBufferLength LonglpBuffer缓冲区的长度

第二个参数

lpBuffer String,指定一个预定义字串,用于装载当前目录

返回值

Long,装载到lpBuffer的字节数。如nBufferLength的长度不够,不足以容纳目录,则返回值是必要的缓冲区长度(要求至少这个长度),其中包括空中止字符。零表示失败。会设置GetLastError

代码实现

  TCHAR szCurrentDirectory[MAX_PATH];
    DWORD  dwCurDirPathlen;
    dwCurDirPathlen=GetCurrentDirectory(MAX_PATH, szCurrentDirectory);
    printf("%d", dwCurDirPathlen);
    if (dwCurDirPathlen == 0) {
        LPCSTR a = "获取当前目录失败";
        LPCSTR  b = "再接再厉";
        MessageBox(NULL, a, b, MB_OK);
        return 0;
    }
    LPCSTR a = "获取当前目录成功";
    LPCSTR  b = "厉害";
    MessageBox(NULL, szCurrentDirectory, b, MB_OK);


在这里插入图片描述

SetCurrentDirectory

函数功能

在开发软件里,常常碰到要读取当前目录下的配置参数文件,或者打开当前目录下别的程序来运行,那么就需要获取当前进程的目录位置,这就需要使用函数GetCurrentDirectory获取当前进程所有在的目录。同时也可以使用setcurrentdirectory函数来改变进程的当前目录。

函数声明

SetCurrentDirectoryA(
    _In_ LPCSTR lpPathName
    );

第一个参数:

LPCTSTR lpPathName程序的目录设置到地址

返回值:

此函数的返回值类型为Long,非零表示成功,零表示失败。会设置GetLastError

注意:

应用程序终止时,工作目录被还原为其原始位置(从其开始进程的目录)。

允许 path 参数指定相对或绝对路径信息。 相对路径信息被解释为相对于当前工作目录。 若要获取当前工作目录,请参见 GetCurrentDirectory

尾随空格从 path 参数的结尾。CONFIG 目录中的已取消。

path 参数不区分大小写。

如果您要将目录设置为装有可移动媒体的驱动器(例如对于软盘驱动器,为“A:”,对于 CD-ROM 驱动器,为“E:”),则可以通过使用 IsReady 属性确定该驱动器是否已就绪。

代码实现

    LPCSTR a = "c:\\";
    if (!SetCurrentDirectory(a)) {
        LPCSTR a = "设置当前目录失败";
        LPCSTR  b = "再接再厉";
        MessageBox(NULL, a, b, MB_OK);
       }
    LPCSTR a1 = "设置当前目录成功";
    LPCSTR  b = "厉害";
    MessageBox(NULL, a1, b, MB_OK);

在这里插入图片描述

CreateDirectorySetCurrentDirectory相结合使用(打了一套组合拳):实现代码下:

  LPCSTR CurrentDirectory = "c:\\";
    if (!SetCurrentDirectory(CurrentDirectory)) {
        LPCSTR a = "设置当前目录失败";
        LPCSTR  b = "再接再厉";
        MessageBox(NULL, a, b, MB_OK);
       }
    LPCSTR CurrentDirectory1 = "设置当前目录成功";
    LPCSTR  CurrentDirectoryTable = "厉害";
    MessageBox(NULL, CurrentDirectory1, CurrentDirectoryTable, MB_OK);



    LPCSTR str1 = "TEST";
    if (!CreateDirectory(str1, NULL)) {
        LPCSTR a = "创建失败";
        LPCSTR  b = "再接再厉";
        MessageBox(NULL, a, b, MB_OK);
        return 0;
    }
    LPCSTR createDirectory = "在当前目录创建成功";
    LPCSTR  b = "厉害";
    MessageBox(NULL, createDirectory, b, MB_OK);

在这里插入图片描述
备注:
2021年坚持学写博客第10天(学习两个windows API) 寻梦SS

明日目标:
windows核心编程API函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寻梦&之璐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值