このコードに問題があります:
#include <iostream>
#include <boost/filesystem.hpp>
namespace bfs = boost::filesystem;
int main(int argc, char **argv)
{
try
{
bfs::create_symlink("C:\\Users\\Administrator\\Desktop\\test.txt",
"C:\\Users\\Administrator\\Desktop\\test_symlink.txt");
}
catch (std::exception& e)
{
std::cout << e.what() << std::endl;
}
return 0;
}
関数を呼び出すcreate_symlink
と、次のメッセージとともに例外がスローされます。
boost::filesystem::create_directory_symlink: The request is not supported: "C:\\Users\\Administrator\\Desktop\\test.txt", "C:\\Users\\Administrator\\Desktop\\test_symlink.txt"
Boost.Filesystem のoperations.cpp
ファイルをざっと調べたところ、次のことがわかりました。
BOOST_FILESYSTEM_DECL
void create_symlink(const path& to, const path& from, error_code* ec)
{
# if defined(BOOST_WINDOWS_API) && _WIN32_WINNT < 0x0600 // SDK earlier than Vista and Server 2008
error(true, error_code(BOOST_ERROR_NOT_SUPPORTED, system_category()), to, from, ec,
"boost::filesystem::create_directory_symlink");
# else
# if defined(BOOST_WINDOWS_API) && _WIN32_WINNT >= 0x0600
// see if actually supported by Windows runtime dll
if (error(!create_symbolic_link_api,
error_code(BOOST_ERROR_NOT_SUPPORTED, system_category()),
to, from, ec,
"boost::filesystem::create_symlink"))
return;
# endif
error(!BOOST_CREATE_SYMBOLIC_LINK(from.c_str(), to.c_str(), 0),
to, from, ec, "boost::filesystem::create_symlink");
# endif
}
_WIN32_WINNT
これは、 Boost をコンパイルするときに十分に高くなかった可能性があることを示唆しています。Boost.Filesystem を再度コンパイルしてコンパイルしましたが、今回はdefine=_WIN32_WINNT=0x601
追加しても同じメッセージで例外が発生します。BOOST_WINDOWS_API
非推奨と思われるものを定義しようとしましたが、コンパイル エラーが発生しました。
Windows 7、Boost 1.54.0、およびmingw-builds をMinGW-x64-4.8.1-posix-seh-rev4
使用しています。