[Boost-users] (newbie) is_regular_file vs. symlinks in boost::filesystem ?

265 views
Skip to first unread message

Christian Convey

unread,
Sep 17, 2012, 4:34:21 PM9/17/12
to boost...@lists.boost.org
I'm writing code that takes a file pathname as a command-line
argument. My program doesn't care whether the pathname is for a
regular file, or if it's a symlink that ultimately leads to a regular
file.

This seems like such a common usage pattern that I would have expected
Boost to have a built-in solution to this problem. But I don't see
one. At the moment it looks like I'll have to write code like this:

my_path = argv[1];

while (my_path is a symlink) {
set my_path to the target of the symlink;
error out of a cycle or excessive indirection is detected;
}

if (! is_regualr_file( my_path )) {
tell user there's a problem;
}

Do I really need to write code like this?
_______________________________________________
Boost-users mailing list
Boost...@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users

Steven Watanabe

unread,
Sep 18, 2012, 12:14:18 AM9/18/12
to boost...@lists.boost.org
AMDG

On 09/17/2012 01:34 PM, Christian Convey wrote:
> I'm writing code that takes a file pathname as a command-line
> argument. My program doesn't care whether the pathname is for a
> regular file, or if it's a symlink that ultimately leads to a regular
> file.
>
> This seems like such a common usage pattern that I would have expected
> Boost to have a built-in solution to this problem. But I don't see
> one. At the moment it looks like I'll have to write code like this:
>
> my_path = argv[1];
>
> while (my_path is a symlink) {
> set my_path to the target of the symlink;
> error out of a cycle or excessive indirection is detected;
> }
>
> if (! is_regualr_file( my_path )) {
> tell user there's a problem;
> }
>
> Do I really need to write code like this?
>

According to the current (1.51) documentation, no.
is_regular_file should already handle this.

In Christ,
Steven Watanabe

Christian Convey

unread,
Sep 18, 2012, 6:26:53 AM9/18/12
to boost...@lists.boost.org
Are you sure? It looks to me like the 1.51 documentation says the
same thing as my 1.50 documentation:

http://www.boost.org/doc/libs/1_51_0/libs/filesystem/doc/reference.html#Enum-file_type

That makes it look like symlinks and regular files are mutually
exclusive, since they have different values in the file_type
enumeration, and is_regular_file just tests for which enumeration
value is associated with the given file's type:

http://www.boost.org/doc/libs/1_51_0/libs/filesystem/doc/reference.html#is_regular_file

Steven Watanabe

unread,
Sep 18, 2012, 1:47:25 PM9/18/12
to boost...@lists.boost.org
AMDG

On 09/18/2012 03:26 AM, Christian Convey wrote:
> Are you sure? It looks to me like the 1.51 documentation says the
> same thing as my 1.50 documentation:
>
> http://www.boost.org/doc/libs/1_51_0/libs/filesystem/doc/reference.html#Enum-file_type
>
> That makes it look like symlinks and regular files are mutually
> exclusive, since they have different values in the file_type
> enumeration, and is_regular_file just tests for which enumeration
> value is associated with the given file's type:
>
> http://www.boost.org/doc/libs/1_51_0/libs/filesystem/doc/reference.html#is_regular_file
>

is_regular_file is defined in terms of status:

http://www.boost.org/doc/libs/1_51_0/libs/filesystem/doc/reference.html#status

"If possible, determines the attributes of the file p resolves to, as if
by ISO/IEC 9945 stat()."
Reply all
Reply to author
Forward
0 new messages