How to check NTFS file permissions?

This problem comes up because WinXP keeps putting it’s ‘System Volume
Information’ directories on each partition. In this case, I think the
FS
was created by an earlier incarnation of the machine I’m on.

However it is marked Read Only, and there doesn’t seem to be any way to
change it. Properties window says it is Read only (with a square, not a
checkmark) and Hidden, and it lets me think I’m changing it, even asks
if
I want to change all subordinates, but never changes it. That’s an OT,
but I’d be happy to hear a solution to it.

The problem I’m having is that File.readable? and File.executable? both
give me true for that directory, but if I try Dir.chdir into it, it
throws
an exception.

Is there a check I can do, or is my only option: rescue Errno::EACCES?
And I guess the followup is: is it much more expensive in Ruby to catch
exceptions than to execute regular code (as it is in Java)?

Thanks,

-Chris

DÅ?a Utorok 07 Február 2006 20:49 Chris napísal:

This problem comes up because WinXP keeps putting it’s ‘System Volume
Information’ directories on each partition. In this case, I think the FS
was created by an earlier incarnation of the machine I’m on.

However it is marked Read Only, and there doesn’t seem to be any way to
change it. Properties window says it is Read only (with a square, not a
checkmark) and Hidden, and it lets me think I’m changing it, even asks if
I want to change all subordinates, but never changes it. That’s an OT,
but I’d be happy to hear a solution to it.

The Properties window doesn’t display whether a directory is or is not
readable as per the POSIX-y meaning of the concept. It should
technically
display as read-only, if the contents of the directory are read-only,
but the
contents aren’t actually checked, if only because it might end up taking
bloody long. I’m not even sure how those vestigial FAT attributes map to
NTFS
ones. If you really want to get nitty-gritty with the system, check
whatever
setting it is that’s hiding the NTFS ACLs from you and look at those.

Slight sidenote: You really don’t want to touch System Volume
Information
unless you really know what you’re doing.

The problem I’m having is that File.readable? and File.executable? both
give me true for that directory, but if I try Dir.chdir into it, it throws
an exception.

Is there a check I can do, or is my only option: rescue Errno::EACCES?
And I guess the followup is: is it much more expensive in Ruby to catch
exceptions than to execute regular code (as it is in Java)?

Do you expect to run into inaccessible directories in the script more
often
than you actually process data in accessible ones? Unless so, I say
don’t
bother and use Errno::EACCES. The overhead isn’t likely to be
significant
compared to total execution time.

David V.

POSIX-y - oh, right. I’m still not used to crossing the Win/not-Win
line
yet :slight_smile: It was strange to see the file attributes of ctime = change
time,
instead of create time. Back to the point, though, if Dir.chdir isn’t a
read and it isn’t an execute (and I assume it isn’t a write), what kind
of
operation is it? And can someone add that method to Ruby’s File or Dir?

I’m hoping I don’t run into this problem often - I’ve gone through a
couple larger partitions and things have worked well except for this one
thing. I’m more than a little surprised that it happened with SVI but
not
with Recycler. And while I don’t trust what I can’t see and Window’s
ACLs are definitely on that list, it gets hard to do anything if I don’t
assume things are working the way it looks like they should. No one has
made enough documentation to dissuade that state of affairs :frowning:

To address Daniel B.'s comment (which jogged my memory of this),
unfortunately in the WindowsXP GUI nothing is cut-and-dried: a checkbox
square can contain a square instead of a checkmark if it is only
partially
true. Here it must be that some of the directory’s files are read-only
but others are not. So it may not reflect anything about the directory
itself. I’m beginning to understand my confusion…

Well, Thanks guys,

-Chris

David V. said: