【问题标题】:Cant open html resource file using ifstream::open - Visual Studio 2013无法使用 ifstream::open 打开 html 资源文件 - Visual Studio 2013
【发布时间】:2015-07-17 15:08:29
【问题描述】:

我正在处理一个需要我打开 HTML 文件并使用其内容的项目。我将它添加到资源文件中,但是当我尝试打开它时,它是这样的:

std::ifstream templateFile;
templateFile.open("filename.html", std::ifstream::in);

操作失败。我使用templateFile.fail() 进行了检查。 当我提供完整路径时,上述操作有效。该文件与其他文件一起位于项目文件夹中。我尝试将构建操作设置为内容,但它仍然不起作用。请帮忙。

【问题讨论】:

  • 您打开的文件不在当前工作目录中。更改 CWD 或使用绝对或正确的相对路径。
  • @CaptainObvlious:该文件与所有其他源文件和头文件位于项目目录中
  • @TapanAnand 如果它确实与 .vcprojx 文件(项目文件夹)在同一个文件夹中,并且您没有做任何事情来覆盖 Debugging 项目属性上的调试工作文件夹,它应该工作。对于我至少从 2003 年起我能回忆起的 VS 的每一种风格,默认值确实是 $(ProjectDir)。当然,埋在你的代码中的一些 chdir 会让所有这些都变得毫无意义,但你在你的帖子中没有提到这样的事情。当然,需要适当的权限(显然)。
  • 之前可能应该问过这个问题。您是从 IDE 运行的,?您在问题中对“资源”术语的使用巧妙地表明您正在尝试将 html 文件添加到链接图像的资源表中,这是一个相当大(而且更复杂)的任务,所以我之前评论假定情况不是
  • 我从 IDE 运行。我已将其添加到解决方案资源管理器中显示的资源文件文件夹中。

标签: c++ file-io visual-studio-2013


【解决方案1】:

您的可执行文件被编译并放入的输出目录与您创建所有 .cpp/.hpp 文件的源目录不同(我假设有filename.html 文件)。本地路径 filename.html 应该是可执行文件的本地路径,而不是源文件。

在此处阅读有关更改输出目录的更多信息:https://msdn.microsoft.com/en-us/library/ms165410.aspx

【讨论】:

  • 我尝试将文件放在与 .exe 相同的目录中。还是不行。
  • @TapanAnand 尝试编译您的程序并添加行以检查本地目录路径 (stackoverflow.com/questions/4807629/…)
  • 本地目录路径与项目目录不同。我如何在不对路径进行硬编码的情况下处理这个问题,即使我只是为用户提供 exe,它也能正常工作?
  • @TapanAnand 这取决于filename.html 是否是静态文件(它是您软件的组成部分)。如果是这样,您应该考虑将其添加为资源文件。这里有一篇关于它的文章:msdn.microsoft.com/en-us/library/zabda143.aspx
  • 我将它作为html文件添加到资源文件中,但仍然无法访问它。
【解决方案2】:

在配置Properties / Debugging 下,查看您的Working Directory 正在使用宏对话框。将您的文件移动到此文件夹中。

点击如图所示的按钮。在那里,单击EditBrowseBrowse 将带您进入工作目录。 Edit 将公开链接以打开宏框

【讨论】:

  • 如何打开宏对话框?
  • 文件在工作目录中。
  • @TapanAnand 要么你的拼写错误,要么你的工作目录不是你想象的那样。
猜你喜欢
  • 1970-01-01
  • 2016-03-05
  • 1970-01-01
  • 2021-04-21
  • 1970-01-01
  • 1970-01-01
  • 2015-11-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多