【问题标题】:C++: Where does the ofstream class save the files to?C++:ofstream 类将文件保存到哪里?
【发布时间】:2011-04-30 08:14:41
【问题描述】:

我从 Windows 迁移到 Mac,现在我遇到了文件输入/输出类的问题:ifstream & ofstream

在 Windows 中使用 g++/代码块运行时

ofstream out("output.txt");
out << "TEST";
out.close();

将在相同的目录中创建一个新文件“output.txt”。

但是在 MAC OS X 中,这个文件是在我的主目录中创建的:/Users/USER_NAME/output.txt

我怎样才能把这个文件和可执行文件放在同一个目录中?

附:我正在使用 GCC 和 CodeBlocks。没有项目 - 我只是在编译一个源文件。

【问题讨论】:

  • 检查代码块设置。它可能是在启动您的应用程序之前设置当前工作目录。

标签: c++ macos file io codeblocks


【解决方案1】:

您需要为您尝试创建的文件提供完整的绝对路径。

【讨论】:

    【解决方案2】:

    流类与所有其他文件打开函数一样,在您提供相对路径时使用当前目录。您可以使用chdir 之类的函数来控制当前目录,但更好的解决方案是使用完全限定的文件名。然后你删除你的程序对当前目录的依赖。

    【讨论】:

    • 我正在做一些 C++ 小问题。我有几十个。如果我指定绝对路径 - 程序将无法在 Windows 上运行。此外,如果我更改目录,它们也将不起作用。
    • @Alex Absolute 并不意味着恒定 :-D 您当然需要从当前程序位置生成绝对路径。使用 argv[0] 查看用于执行程序的相对路径。
    • @Let_Me_Be,但 Rob 说“更好的解决方案是使用完全限定的文件名”......我完全糊涂了。我只需要从可执行文件所在的目录访问文件。
    • @Alex 好吧,我也是这么说的。关键是您需要为程序的每次运行构建路径。您不能只在代码中添加一些常量。
    • @Alex,你没抓住重点。停止依赖当前目录。但是,如果您确实必须更改 Code Blocks 目录,则将其作为 新问题 提出。您已经得到了有关流类将文件放置在何处的答案。在你得到答案后改变问题的性质是不受欢迎的,而且往往会获得反对票。而是发布一个新问题。
    【解决方案3】:

    文件只是在当前工作目录中创建。更改工作目录或提供完整路径。

    【讨论】:

    【解决方案4】:

    工作目录最初是在您的程序启动时设置的。当您从命令行启动它时,您会从 shell 继承当前工作目录。在 CodeBlock 中,项目选项之一是用于调试运行的执行工作目录。

    (另见http://www.gamedev.net/community/forums/topic.asp?topic_id=571206&whichpage=1

    【讨论】:

    • 即使我从命令行启动它,它仍然会在 USER 文件夹中创建文本文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多