Opened 5 years ago

#13135 new Bugs

boost::filesystem::exists silently fails to work on MSVC with newly created symlink

Reported by: Antony Polukhin Owned by: Beman Dawes
Milestone: To Be Determined Component: filesystem
Version: Boost 1.65.0 Severity: Problem
Keywords: exists fs filesystem msvc Cc:

Description

The following program:

#include <boost/filesystem/operations.hpp>
#include <cassert>
#include <fstream>
#include <iostream>

int main() {
    boost::system::error_code error;

    boost::filesystem::create_directories("dir/subdir", error);
    assert(!error);

    std::ofstream ofs("dir/subdir/file.txt");
    ofs << "Boost.Filesystem is fun!";
    assert(ofs);
    ofs.close();

    boost::filesystem::create_symlink("dir/subdir/file.txt", "symlink", error);
    if (!error) {
        std::cerr << "Symlink created\n";
        assert(boost::filesystem::exists("symlink"));
    } else {
        std::cerr << "Failed to create a symlink\n";

        boost::filesystem::remove_all("dir", error);
        assert(!error);

        boost::filesystem::remove("symlink", error);
        assert(!error);
    } /*if (!error)*/
} /*main*/

Works well on Linux and Windows+MinGW but fails to work on msvc-14.0:

--- Stderr:
Symlink created
Assertion failed: boost::filesystem::exists("symlink"), file .\main.cpp, line 20
--- Ret code: 3

Failed run can be found here: https://ci.appveyor.com/project/apolukhin/boost-cookbook/branch/second_edition/job/1ycwqk36phd8h8il

P.S.: Code from above worked well a few months ago. Looks like some recent change broke the example.

Change History (0)

Note: See TracTickets for help on using tickets.