Boost logo

Boost :

Subject: Re: [boost] [filesystem] Windows long paths (and also APIdifferences)
From: Adam Badura (abadura_at_[hidden])
Date: 2009-09-09 02:11:11


> Could you post your "simple test program"?

    The test program is:

#include <iostream>
#include <boost/exception.hpp>
#include <boost/filesystem.hpp>

int main()
{
        typedef boost::filesystem::path path_type;

        const path_type::string_type FOLDER_NAME = "Adam";

        try
        {
                path_type path( "D:/" );
                for ( int i = 0; i < 49; ++i )
                        path /= FOLDER_NAME;

                std::cout << path.external_directory_string()
                        << " (" << path.external_directory_string().size() << ")"
                        << std::endl;

                boost::filesystem::create_directories( path );
        }
        catch ( ... )
        {
                std::cerr << boost::current_exception_diagnostic_information();
        }

        return 0;
}

    However I rechecked it. wchar_t indeed throws. I must have missed it
somehow. Sorry. My bad. But I was mistaken by create_directories side
effects. It created as much folders as possible and then threw without
deleting the folders it really created.
    In the example above 49 iterations is a limit. For 50 iterations there
is a failure of too long path. However for 50 iterations the path reaches
length of 252 so I do not understand why this error happens.
    And still there is a limit with this function.

> Windows has various rules, depending on the version, exact syntax
> used, etc. Thus it would help if you could be much more specific
> about the problem you are having, version of operating system, etc.

    Windows Vista Home Premium SP2.

    However all this seems to be Windows internal limitations. When I opened
the 49th created folder in Windows Explorer and tried to make a new folder
there I got a message of too long path. (Also pasting there a folder with 1
character name resulted in this error.) Even more interestingly making a new
file there works fine however the file starts with no name (only extension)
since the default new file name is too long. However the file accepts name
of 7 characters (so with extension it is 11).
    After all likely everything is fine with Boost.Filesystem. Sorry for
trouble.

>> Also by the way I wanted to ask why signatures of many functions differ
>> from the documentation. For example no function takes error code
>> parameter
>> and thus always throws on failure (excluding the above example...). In
>> some
>> places I would prefer to have that parameter instead. Also copy_file does
>> not take the third parameter allowing it to do replacing.
>> Why is it so?
>
> It sounds like you are trying to use the V3 documentation from the
> sandbox with the current 1.40.0 V2 release. That's a non-starter.

    No. I never do. I used
http://www.boost.org/doc/libs/1_40_0/libs/filesystem/doc/reference.html#Operations-functions
And I went there in what I guess is a standard way. Boost Main Page /
Documentation / 1.40.0 (Current Release) / Filesystem / Reference / Other
operations functions.

    Adam Badura


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk