It is a bit of a knotty problem. I've ended up with:

- (BOOL)ks_isEqualToURL:(NSURL *)otherURL;
{
    BOOL result = [self isEqual:otherURL];
    
   // For file: URLs the default check might have failed because they reference 
the host differently. If so, fall back to checking paths
    if (!result && [self isFileURL] && [otherURL isFileURL])
    {
        result = [[self path] isEqualToString:[otherURL path]];
    }
    
    return result;
}

From here: 
https://github.com/karelia/KSFileUtilities/blob/master/KSURLUtilities.m

Part of the problem really is expressing what equality you actually want to 
test. For example, it's perfectly legal for a file URL to have a query or 
fragment. But the filesystem will ignore that, rendering it obsolete for a URL 
comparison. Thus the only safe way to test equality as you want here is to 
compare paths.

On 28 May 2011, at 00:13, Sean McBride wrote:

> Hi all,
> 
> What is the correct way to test if two NSURLs refer to the same file
> system object?
> 
> I've just learnt the hard way that one can have two URLs that refer to
> the same file system object but because they are subtly different,
> isEqual: returns NO:
> 
> ex:
> 
> <file://localhost/Volumes/Disk/Users>
> vs
> <file:///Volumes/Disk/Users>
> 
> isEqual: returns NO.  I guess this makes some sense, but it's not the
> kind of equality I'm looking for.
> 
> What would best practice be?  Convert to full path, and compare those?
> Note: I'm not concerned about resolving symlinks or aliases.
> 
> (Aside: I was surprised to see that there is no isEqualToURL:, analogous
> to isEqualToString, isEqualToSet, etc.  I wonder why...)
> 
> Thanks,
> 
> --
> ____________________________________________________________
> Sean McBride, B. Eng                 s...@rogue-research.com
> Rogue Research                        www.rogue-research.com
> Mac Software Developer              Montréal, Québec, Canada
> 
> 
> _______________________________________________
> 
> Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)
> 
> Please do not post admin requests or moderator comments to the list.
> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
> 
> Help/Unsubscribe/Update your Subscription:
> http://lists.apple.com/mailman/options/cocoa-dev/cocoadev%40mikeabdullah.net
> 
> This email sent to cocoa...@mikeabdullah.net

_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to