Mailing Lists: Apple Mailing Lists
Image of Mac OS face in stamp
Re: Best File System API to use?
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Best File System API to use?



Hi,

I was reading the File Manager PDF and all I can say is that this function is well hidden!

Found it now, thanks a lot!

All the Best
Dave

On 23 May 2007, at 10:17, Frank Vyncke wrote:

On 5/23/07 11:13 AM, "Dave" <email@hidden> wrote:

Hi,

I have decided to use the FSRef APIs, which begs another question,
How do I convert a C string (or CFString) into an FSRef? My functions
are passed a Posix File Path and I don't have a choice about that.

Here is my piece of code that does that:
(note that I store the data in an object that can hold an FSRef and a
unicode name because an FSRef can only point to an existing file and/or
folder, and the ScopedCFRef thingies is a simple class that will release the
CFObject when the object is deleted)


Frank
-----------------------------------------
    if (inOSPath.size() == 0)
        return;

    bool isFolder = inOSPath[inOSPath.size() - 1] == '/';

ScopedCFRef< CFStringRef >
cfPath(CFStringCreateWithCString(kCFAllocatorDefault , inOSPath.c_str(),
kCFStringEncodingISOLatin1));
if (cfPath.Get() == NULL)
return;


ScopedCFRef< CFURLRef >
cfURL(CFURLCreateWithFileSystemPath(NULL,cfPath.Get (),kCFURLPOSIXPathStyle,i
sFolder));
if (cfURL.Get() == NULL)
return;


    if (CFURLGetFSRef(cfURL.Get(), &mFSRef))
    {
        // existing file or folder. Check what it is
        FSCatalogInfo catalogInfo;
        OSErr osErr = FSGetCatalogInfo(&mFSRef, kFSCatInfoNodeFlags,
&catalogInfo, NULL, NULL, NULL);

        if (osErr != noErr)
            return;

        if (catalogInfo.nodeFlags & kFSNodeIsDirectoryMask)
            mSpecState = kFSRefIsAFolder;
        else
            mSpecState = kFSRefIsAFile;

        MakeValid();
    }
    else
    {
        // non-existing file

ScopedCFRef< CFStringRef >
cfFileName(CFURLCopyLastPathComponent(cfURL.Get()));
ScopedCFRef< CFURLRef >
parentCFURL(CFURLCreateCopyDeletingLastPathComponent(NULL, cfURL.Get ()));
if (parentCFURL.Get() == NULL)
return;


if (CFURLGetFSRef(parentCFURL.Get(), &mFSRef))
{
mSpecState = kFSRefAndFileNameAreAFile;
mFileName = CreateUserStringFromCFStringRef (cfFileName.Get());
MakeValid();
}
}
---------------------------------------

Thanks a lot All the Best Dave

On 22 May 2007, at 20:57, Rosyna wrote:

The other issue is that once you get start using paths (or any
technology), you tend to stick with them for all the code.

Paths are extremely fragile and unfriendly to user, especially when
saving them in persistent storage.

Since Mac OS X mounts volumes in /Volume/<vol name>/ it's very
possible for a path to become invalidated if it points to a file on
a volume that is not the boot volume. If for some unforeseen
reason, a folder with the name of the volume already exists in /
Volumes/ when it comes time to mount the volume, OS X will append a
number to that name, making the paths invalid.

But everyone here already knew that.

Also, since a path may span multiple volumes, there can be a
measurable amount I/O every time a path needs to be resolved to
it's real file. FSRefs don't have this issue.

But everyone here already knew that.

I guess it's best to just search the archives for "paths are evil"
before the reasons why paths are evil is rehashed again.

Ack, at 5/22/07, Laurence Harris said:

The only real issue should be length.

--


Sincerely, Rosyna Keller Technical Support/Carbon troll/Always needs a hug

Unsanity: Unsane Tools for Insanely Great People

It's either this, or imagining Phil Schiller in a thong.
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Carbon-dev mailing list      (email@hidden)
Help/Unsubscribe/Update your Subscription:
40looktowindward.com

This email sent to email@hidden


____________________F_r_a_n_k___V_y_n_c_k_e________________ Odystar Graphics with Intelligence



_______________________________________________ Do not post admin requests to the list. They will be ignored. Carbon-dev mailing list (email@hidden) Help/Unsubscribe/Update your Subscription: This email sent to email@hidden
References: 
 >Re: Best File System API to use? (From: Frank Vyncke <email@hidden>)



Visit the Apple Store online or at retail locations.
1-800-MY-APPLE

Contact Apple | Terms of Use | Privacy Policy

Copyright © 2011 Apple Inc. All rights reserved.