C++ boost::filesystem::不支持创建\u符号链接
我对这段代码有问题:C++ boost::filesystem::不支持创建\u符号链接,c++,boost,symlink,boost-filesystem,C++,Boost,Symlink,Boost Filesystem,我对这段代码有问题: #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",
#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;
}
我浏览了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
}
BOOST\u FILESYSTEM\u DECL
无效创建符号链接(常量路径和收件人、常量路径和发件人、错误代码*ec)
{
#如果已定义(BOOST_WINDOWS_API)&&&_WIN32_WINNT<0x0600//SDK早于Vista和Server 2008
错误(为真,错误代码(不支持BOOST\u error\u,system\u category()),到,从,ec,
“boost::filesystem::create_directory_symlink”);
#否则
#如果已定义(BOOST_WINDOWS_API)&&&&u WIN32_WINNT>=0x0600
//查看Windows运行时dll是否实际支持
如果(错误(!创建符号链接api),
错误代码(不支持BOOST错误,系统类别()),
致,自,欧共体,,
“boost::filesystem::create_symlink”))
返回;
#恩迪夫
错误(!BOOST_CREATE_SYMBOLIC_链接(从.c_str(),到.c_str(),0),
to,from,ec,“boost::filesystem::create_symlink”);
#恩迪夫
}
这表明我的\u WIN32\u WINNT
在编译Boost时可能不够高。我再次编译了Boost.Filesystem,但这次添加了define=\u WIN32\u WINNT=0x601
,我仍然收到了一个异常消息。我也尝试过定义BOOST\u WINDOWS\u API
,但这导致了编译错误
我使用的是Windows 7、Boost 1.54.0和
MinGW-x64-4.8.1-posix-seh-rev4
from.我不确定,但我的意思是符号链接仅在unix系统上受支持。我不确定,但我的意思是符号链接仅在unix系统上受支持
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
}