C++ 创建文件夹的四种方式

在开头不得不吐槽一下,我要的是简单明了的创建文件夹的方式,看得那些文章给的都是复杂吧唧的一大坨代码,不仔细看鬼知道写的是啥。因此,为了方便以后自己阅读,这里自己写一下 C++ 创建文件夹的四种方式:

貌似都是 Windows 的

提前说明:从参数角度上看,其实都应该使用 char*,但是为了方便这里使用的都是 string。在 SO 上找到一个方式把 string 转成 char*,就是调用 string 的 c_str() 函数。

本文示例都是在 E:\database 路径下创建一个叫做 testFolder 的文件夹。

使用 system() 调用 dos 命令

#include <iostream>
using namespace std;

int main()
{
    string folderPath = "E:\\database\\testFolder"; 

    string command;
    command = "mkdir -p " + folderPath;  
    system(command.c_str());

    return 0;
}

使用头文件 direct.h 中的 access 和 mkdir 函数

关于 direct.h 我觉得 维基百科 上介绍的不错

#include <direct.h>
#include <iostream>
using namespace std;

int main()
{
    string folderPath = "E:\\database\\testFolder"; 

    if (0 != access(folderPath.c_str(), 0))
    {
        // if this folder not exist, create a new one.
        mkdir(folderPath.c_str());   // 返回 0 表示创建成功,-1 表示失败
        //换成 ::_mkdir  ::_access 也行,不知道什么意思
    }

    return 0;
}

调用 Windows API 函数

#include <windows.h>
#include <iostream>
using namespace std;

int main()
{
    string folderPath = "E:\\database\\testFolder"; 

    if (!GetFileAttributesA(folderPath.c_str()) & FILE_ATTRIBUTE_DIRECTORY) {
        bool flag = CreateDirectory(folderPath.c_str(), NULL);
        // flag 为 true 说明创建成功
    } else {
        cout<<"Directory already exists."<<endl;
    }

    return 0;
}

调用 MFC 封装好的接口函数

不推荐此方法,出错的话会有点麻烦。

#include <iostream>
#include <shlwapi.h>
using namespace std;

int main()
{
    string folderPath = "E:\\database\\testFolder"; 

    if (!PathIsDirectory(folderPath.c_str()))  // 是否有重名文件夹
    {
        ::CreateDirectory(folderPath.c_str(), 0);
    }

    return 0;
}

如果你出现了错误 undefined reference to imp__PathIsDirectory @ 4,可以参考 undefined reference to imp PathIsDirectory
下面的方法是基于你详细阅读完上述链接后的前提下给出的

说我在 CodeBlocks 下解决该问题的方法:
第一步:在项目上右击,选择 Build Options
在这里插入图片描述

第二步: 在 Linker Settings 里添加 libshlwapi.a 文件
在这里插入图片描述

  • 90
    点赞
  • 356
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
您可以使用以下代码在C++创建文件和桌面快捷方式: ```cpp #include <iostream> #include <windows.h> #include <shlobj.h> int main() { // 创建文件 std::string folderPath = "C:\\path\\to\\folder"; if (!CreateDirectory(folderPath.c_str(), NULL)) { std::cout << "无法创建文件!" << std::endl; return 1; } // 创建桌面快捷方式 std::string desktopPath; HRESULT result = SHGetFolderPathA(NULL, CSIDL_DESKTOPDIRECTORY, NULL, 0, desktopPath); if (result != S_OK) { std::cout << "无法获取桌面路径!" << std::endl; return 1; } std::string shortcutPath = desktopPath + "\\MyFolderShortcut.lnk"; result = CoInitialize(NULL); if (result != S_OK) { std::cout << "无法初始化COM库!" << std::endl; return 1; } IShellLink* pShellLink; result = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID*)&pShellLink); if (result != S_OK) { std::cout << "无法创建Shell链接实例!" << std::endl; CoUninitialize(); return 1; } pShellLink->SetPath(folderPath.c_str()); pShellLink->SetDescription("My Folder Shortcut"); IPersistFile* pPersistFile; result = pShellLink->QueryInterface(IID_IPersistFile, (LPVOID*)&pPersistFile); if (result != S_OK) { std::cout << "无法获取IPersistFile接口!" << std::endl; pShellLink->Release(); CoUninitialize(); return 1; } result = pPersistFile->Save(shortcutPath.c_str(), TRUE); if (result != S_OK) { std::cout << "无法保存快捷方式!" << std::endl; pPersistFile->Release(); pShellLink->Release(); CoUninitialize(); return 1; } pPersistFile->Release(); pShellLink->Release(); CoUninitialize(); std::cout << "文件和桌面快捷方式创建成功!" << std::endl; return 0; } ``` 请确保将 `C:\path\to\folder` 替换为您要创建的文件的实际路径。这段代码使用了Windows API来创建文件和桌面快捷方式
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值