我需要一种跨平台的方式来获取当前的工作目录(是的,getcwd可以实现我想要的功能)。我认为这可以解决问题:

#ifdef _WIN32
    #include <direct.h>
    #define getcwd _getcwd // stupid MSFT "deprecation" warning
#elif
    #include <unistd.h>
#endif
#include <string>
#include <iostream>
using namespace std;

int main()
{
    string s_cwd(getcwd(NULL,0));
    cout << "CWD is: " << s_cwd << endl;
}

我读到以下内容:
  • _getcwd at MSDN
  • getcwd at Kernel.org
  • getcwd at Apple.com

  • 应该没有内存泄漏,它也应该在Mac上也可以,对吗?

    更新:我担心这里还是有问题(我试图避免创建具有确定长度的char数组,因为没有适当的方法来获取getcwd的适当长度):
    char* a_cwd = getcwd(NULL,0);
    string s_cwd(a_cwd);
    free(a_cwd); // or delete a_cwd?
    

    最佳答案

    如果您没有问题,请使用boost filesystem进行方便的跨平台文件系统操作。

    boost::filesystem::path full_path( boost::filesystem::current_path() );
    

    这是一个example

    编辑:正如Roi Danton在评论中指出的那样,文件系统已成为ISO C++ in C++17的一部分,因此不再需要boost:
    std::filesystem::current_path();
    

    关于c++ - 跨平台获取当前目录的方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2868680/

    10-11 18:46