如何在主目录中创建文件夹?

Posted

技术标签:

【中文标题】如何在主目录中创建文件夹?【英文标题】:How to create a folder in the home directory? 【发布时间】:2011-06-20 22:22:18 【问题描述】:

我想创建一个目录path = "$HOME/somedir"

我尝试过使用boost::filesystem::create_directory(path),但它失败了——显然该函数没有扩展系统变量。

我怎样才能以最简单的方式做到这一点?

(注意:在我的例子中,字符串path 是常量,我不确定它是否包含变量)

编辑:我正在使用 Linux(尽管我计划在不久的将来将我的应用程序移植到 Windows)。

【问题讨论】:

你是在linux还是windows上工作? 【参考方案1】:

使用getenv获取环境变量,包括HOME。如果您不确定它们是否存在,则必须解析字符串以查找它们。

您也可以使用系统 shell 和 echo 让 shell 为您执行此操作。

Getenv 是可移植的(来自标准 C),但在 *nix 和 Windows 之间使用 shell 进行移植会更难。 *nix 和 Windows 之间的环境变量约定也不同,但推测该字符串是一个配置参数,可以针对给定平台进行修改。

如果您只需要支持扩展主目录而不是任意环境变量,则可以使用~ 约定,然后使用~/somedir 作为配置字符串:

std::string expand_user(std::string path) 
  if (not path.empty() and path[0] == '~') 
    assert(path.size() == 1 or path[1] == '/');  // or other error handling
    char const* home = getenv("HOME");
    if (home or ((home = getenv("USERPROFILE")))) 
      path.replace(0, 1, home);
    
    else 
      char const *hdrive = getenv("HOMEDRIVE"),
        *hpath = getenv("HOMEPATH");
      assert(hdrive);  // or other error handling
      assert(hpath);
      path.replace(0, 1, std::string(hdrive) + hpath);
    
  
  return path;

这个行为是从 Python 的os.path.expanduser 复制而来的,除了它只处理当前用户。可以通过检查目标平台而不是盲目地尝试不同的环境变量来改进与平台无关的尝试,即使在 Linux 上不太可能设置 USERPROFILEHOMEDRIVEHOMEPATH

【讨论】:

【参考方案2】:

在我的头顶,

namespace fs = boost::filesystem;
fs::create_directory(fs::path(getenv("HOME")));

【讨论】:

请参阅“在我的情况下,字符串路径是恒定的,我不确定它是否包含变量”。此外,您可能需要检查 getenv 的返回值以防 HOME 未设置 - 这应该非常罕见,但最好中止或以其他方式终止错误而不是进入未定义的土地。 目录$HOME 通常已经存在,所以使用create_directory 是没有意义的。显然你忘记了子目录:P.

以上是关于如何在主目录中创建文件夹?的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Android 11 中创建文件夹(目录),如何创建?

如何在 Azure 存储容器中创建目录而不创建额外文件?

如何在 C 语言的 windows 的 %appdata% 路径中创建目录并创建文件

PHP在与脚本相同的目录中创建文件

如何在 Google Drive Sync 创建的云目录中创建文件夹?

如何在文档目录中创建具有自定义扩展名的文件?