On 11/9/05, John Stiles <email@hidden> wrote:
> Mark Wagner wrote:
> On 11/9/05, Chris Page <email@hidden> wrote:
>
> On Nov 9, 2005, at 11:26 AM, Mark Wagner wrote:
>
> How do I determine the access permissions for a file? The headers
> indicate that FSCatalogInfo has a field called "permissions", that for
> a file on an HFS+ disk will return the POSIX permissions for the file,
> but how do I get from that to an answer to "can I read that file?"
>
> Also, what about other situations, such as:
> - A file on a FAT-12 floppy disk? What if the disk is locked?
> - A file on a Windows file server?
> - A file on an HFS disk?
> - A file on a CD-ROM?
>
> The short answer is: Don't bother trying to determine whether you can
> read the file, just try opening the file with the access you want and
> see if that succeeds.
>
> Let's pretend I was so insane as to actually want to do this. How
> would I handle common "special cases"? Would the "permissions" member
> of an FSCatalogInfo structure have anything sensible for a file on a
> Windows file server? How would I handle making sure I wasn't about to
> try to write to a CD-ROM?
>
> Wait, I'm not clear here. Is your goal to know the POSIX access flags
> (-rwxrwxrwx), or is your goal to determine whether a file can be written to?
>
> FSGetCatalogInfo's permissions tells you the POSIX access flags
>
> The easiest way to learn whether a file can be written to is to open the
> file with write permission and then immediately close it. If you were able
> to open it, it's writable. This is safe to do and doesn't take a long time.
> Checking all the cases that "open" would check is probably very difficult to
> do properly, and may change between OS releases. (OS X Server even added
> ACLs recently, I think, and AFAIK there's no way for you to peer at their
> innards.)
>
> If your goal is something else still, please be more specific :)
I'm writing a replacement for a set of existing functions that check
for readability, writability, and executability, as part of an upgrade
of our cross-platform compatibility library. The current versions
date from when the differences between System 6 and System 7 were a
concern, and currently check for file sharing permissions, file
locking, and if the file is currently open (in which case it is
considered to be readable but not writable). I'm trying to write a
replacement that can deal with POSIX permissions, media that can't be
written to (CD-ROMs being the most common case), and if possible,
common network situations.
The most common use will be checking to see if data files can be
opened read-write, or if they need to be opened in read-only mode, but
there are other uses, such as seeing if an error log can be written to
a given location, or sanity-checking of common locations such as the
preferences folder or temporary items folder. There are also a few
code paths that I'm fairly sure aren't used on the Mac, but which
involve checking the read/write status of whole folders of documents.
I'm fairly sure that attempting to open a few thousand files is the
least-efficient method of checking that status.
Thanks,
Mark Wagner
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Carbon-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/carbon-dev/email@hidden
This email sent to email@hidden