【问题标题】:C++ Creating a File if it does not exist如果文件不存在,C++ 创建一个文件
【发布时间】:2013-12-25 03:11:39
【问题描述】:

我想使用 OFstream 在文件夹中创建一个文件。以下代码行 - 始终给出“无法创建输出文件......”。不管我怎么尝试。

最终我想用一个变量(字符串类型)替换字符串的 JOHN 部分。

非常感谢提示。

     ofstream output_file(".\\Players\\JOHN\\Balance.txt", ios::app); // open the output file for appending
if (!output_file.is_open()) { // check for successful opening
    cout << "Output file could not be opened! Terminating!" << endl;
    _sleep(1000);
    return 1; 
}
else{

output_file << getAcctbal(); 
output_file.close();
return 0;
}

编辑:

有一个 Players 文件夹 - 在那个 Players 文件夹中。对于每个单独的玩家,我想要一个文件(所以约翰)在这种情况下是一个文件夹。这个文件夹不存在,是我想要实现的。 非常感谢:-)

【问题讨论】:

  • 您确定目录PlayersPlayers\JOHN 相对于当前工作目录存在吗? (这可能与您的可执行文件不在同一个目录。)
  • 不,文件夹 JOHN 是我要创建的文件夹。在该文件夹中,我想创建一个名为 DETAILS.txt 的文件夹
  • 也许您没有创建它的访问权限?
  • 打开文件不会创建目录(又名文件夹)。您需要为此使用不同的 API。我不确定最好的 Windows API 是什么,但在 POSIX(又名 UNIX、Linux)中,mkdir() 是您想要的。 Windows 也可能支持它,因为它有一些 POSIX 支持。不过,我不是 Windows 专家。
  • @JoeZ - 这就是我出错的地方!我一直认为 OFstream 会为我创建它:L

标签: c++ file-io


【解决方案1】:

文件只能在已经存在的目录中创建。因此,您确实需要在尝试创建文件之前强制目录结构存在。

没有 C++ 标准库功能可以做到这一点。您可以实现自己的功能来轻松地做到这一点。解析其目录组件的路径。从树的最高点开始,依次创建每个子目录。

您似乎在使用 Windows。 Windows API 具有直接满足您需求的功能。特别是SHCreateDirectory 函数。我不知道您是否准备好将自己绑定到诸如此类的特定于平台的 API - 选择权在您手中。

【讨论】:

    猜你喜欢
    • 2012-04-08
    • 2016-06-18
    • 2011-01-19
    • 2014-01-02
    • 1970-01-01
    • 2022-12-09
    • 2013-09-18
    相关资源
    最近更新 更多