【问题标题】:File not being created in correct directory C++文件未在正确的目录 C++ 中创建
【发布时间】:2015-08-18 06:27:42
【问题描述】:

我正在尝试使用 fstream 创建文件,但是我尝试创建的文件不会出现在 .exe 目录或文件目录中的任何其他位置。在我的计算机中搜索该文件后,我发现它完全是在不同的目录中创建的,即使我使用的是相对目录。

这是创建文件的代码:

ofstream file;
file.open("something.jpg", ios::out|ios::binary|ios::beg);

创建文件目录:C:\Users\user-pc

项目目录:D:\Users\user-pc\Documents\Visual Studio 2012\Projects\recvFile

顺便说一句,使用绝对目录可以很好地工作。这可能是项目工作目录的问题吗?

【问题讨论】:

  • 简短回答是。在项目属性中设置工作目录。
  • 认为文件应该在哪里创建?作为开发人员,您应该做出有意识的决定。 “相对于 X”很好,如果你知道 X 来自哪里。 “相对于随机目录”不是。

标签: c++ file visual-studio-2012 fstream ofstream


【解决方案1】:

在您的 Visual Studio 中右键单击您的项目,单击属性,然后转到配置属性,然后是调试。有一行“工作目录”。您可以在那里设置工作目录。如果您需要以编程方式执行此操作,可以使用 SetCurrentDirectory

如果需要在.exe所在目录下创建文件,可以使用这种方式:https://stackoverflow.com/a/124901/1915854

使用 0 作为模块句柄调用 GetModuleFileName()...

如果.exe 安装在像Program Files 这样的共享目录中,那么在同一目录中创建文件可能需要额外的权限,这可能是个坏主意。如果.exe只是克隆到它应该创建文件的目录,那么就不存在这样的问题。

【讨论】:

  • 我刚刚注意到,如果我从 Visual sudio 运行应用程序,它会在项目目录中创建文件(这很有意义,因为工作目录是 ProjectDir)。但问题依然存在;如果我从 cmd 运行 exe,则会在错误的目录中创建文件。
  • 您应该在问题中提供有关如何从cmd 运行程序的详细信息。 cmd 给出什么提示?里面的当前目录是什么?
  • 显然我错误地认为exe将在存储exe的目录中创建文件,而不是从运行它的位置。该文件只是在 cmd 的当前目录中创建。
  • @Erran,我已经添加了关于如何确定 .exe 目录的说明。
  • “在 EXE 目录中创建文件”是一个非常糟糕的主意。 Windows 2000 建议禁止它,XP 开始强制执行该规则。使用 Vista,您将获得更多的 UAC 复杂性。简而言之,EXE 目录是共享资源,因此不适用于个人用户帐户。现在读取你的EXE目录中的文件非常好,GetModuleFileName方法是可以接受的。
【解决方案2】:

尝试在链接中添加“../”:

file.open("../something.jpg", ios::out|ios::binary|ios::beg);

【讨论】:

    【解决方案3】:

    文件将在项目的 Debug/Release 文件夹中创建。试试 Timo Rzipa 的建议。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-26
      相关资源
      最近更新 更多