【问题标题】:boost::filesystem::path and fopen()boost::filesystem::path 和 fopen()
【发布时间】:2012-07-06 08:21:17
【问题描述】:

尝试执行此操作时出现错误:

path p = "somepath";
FILE* file = fopen(p.c_str(), "r");

我明白了:

“const boost::filesystem::path::value_type *”类型的参数与“const char *”类型的参数不兼容

谁能告诉我我做错了什么?谢谢

【问题讨论】:

  • 这是什么系统? Linux?视窗?它可能会失败,因为 Windows 中的 value_typewchar_t
  • 好的,然后尝试p.string().c_str() 而不是p.c_str()。前者意味着转换以获得正确的类型。
  • p.string().c_str() 有效!谢谢。
  • 好的,我在下面添加了回复。如果你愿意,你可以接受。

标签: c++ windows fopen std boost-filesystem


【解决方案1】:

如果您在 Windows 下,则 value_typewchar_t,并且将在 fopen 的转换中失败(需要 char*)。根据文档,您似乎必须使用string() 方法来获取具有默认代码转换器的标准字符串(wchar_t -> char):

FILE* file = fopen(p.string().c_str(), "r");

【讨论】:

  • 需要注意的是,在某些情况下,C++ 标准库(例如,fopen())不能用于在 Windows 上打开文件,因为 Windows 期望传递给 fopen 的文件名的编码无法表示该文件的名称。目前尚不清楚 Windows 何时或是否会修复此错误。与此同时,Windows 提供了一个非标准函数 _wfopen,作为一种解决方法。所以_wfopen(p.c_str(),L"r") 应该可以工作。
猜你喜欢
  • 2016-06-02
  • 2011-04-23
  • 2018-02-18
  • 1970-01-01
  • 2011-01-24
  • 1970-01-01
  • 2011-12-19
  • 1970-01-01
  • 2012-01-23
相关资源
最近更新 更多