【发布时间】:2014-03-26 17:13:41
【问题描述】:
直到一周前,我一直在我的项目中使用 Boost 1.46.1。将所有内容升级到 Boost 1.55.0 后,我注意到某些功能无法像以前那样工作。
我的软件加载通过 SymLink 放置的配置文件。我正在使用 Microsoft 的 mklink 来执行此操作。
我今天发现,虽然 1.46.1 版本中的 boost::filesystem::is_empty() 为我的链接返回 false,但它现在在 1.55.0 中返回 true。不幸的是,我无法更改使用该代码的组件。结果是我的配置文件不再加载。
- 有没有办法以 Boost 能够识别的方式创建链接?
- 如果我可以访问代码:我需要如何更改它才能再次工作?
更新:
更多回应 cmets 的信息:
- SymLink 有效,有一个文件链接到它
- 链接到 SymLink 的文件不是空的,它是之前有效的配置文件
- 用户拥有 SymLink 和链接文件的权限
- 我可以对该文件执行
fopen并读取其内容
更新 2:
我刚刚创建了一个 Github 项目,其中包含重新创建问题的所有内容。我使用VS 2013 Express编译程序:
【问题讨论】:
-
听起来很奇怪。必须做额外的工作来检测符号链接。你能发布示例代码吗?
-
请详细说明您传递给 Boost 的符号链接的确切状态。链接是否断开(目标不存在)?如果目标存在,它的大小是否为 0(目标为空)?还是符号链接会导致非空文件?还要确保用户对符号链接及其目标都具有权限。
-
我刚刚确认了与 mingw g++ 4.8.2 一起使用的 boost 5.5.0 报告
is_empty对于非空文件的链接是正确的。 -
刚刚添加了更多信息,感谢到目前为止的 cmets
-
我在 Mac OS 上测试了 Boost 1.55,如果符号链接指向非空文件,它将报告 is_empty() 为 false,如果它指向空文件,则报告为 true。所以它“遵循”符号链接。
标签: c++ windows boost symlink boost-filesystem