Thanks a lot or your quick response!

>> I would at least attributesOfItemAtPath:error expect to show 
>> NSFileTypeSymbolicLink for the aliases and symlinks.
> 
> No, aliases are files, not symbolic links. Symbolic links are a special 
> category of file system objects in a Unix-compatible file system.

I understand.

> (And you should be using URLs generally, instead of paths.)

Will try to do.

>> 
>> [NSNumber numberWithBool: YES] == [fattrs objectForKey: 
>> NSFileExtensionHidden]
> 
> Also, this is really bad. These are objects, and there’s no guarantee that 
> the object pointers are identical,

Right, of course, thanks, that was stupid.

I have now written a small test program using
enumeratorAtURL:includingPropertiesForKeys:options:errorHandler:

Code is below.

One thing that surprised me a little, in light of the fact that aliases are 
completely different from symlinks, 
is that 
  [url getResourceValue: &isAlias forKey: NSURLIsAliasFileKey error: nil]
yields true for both aliases and symlinks.

Similarly, the method URLByResolvingAliasFileAtURL: seems to resolve both 
aliases and symlinks just fine.

Which is nice, because it makes the code easier.

Best regards, 
Gabriel.



Code for testing (error handling omitted for sake of clarity):


    NSFileManager * filemanager = [NSFileManager defaultManager];
    NSURL * directoryURL = ...
    NSArray * keys = [NSArray arrayWithObjects:
                      NSURLIsDirectoryKey, NSURLIsAliasFileKey, 
NSURLIsSymbolicLinkKey,
                      NSURLLocalizedNameKey, nil];
    NSDirectoryEnumerator *enumerator = [filemanager
                                         enumeratorAtURL: directoryURL
                                         includingPropertiesForKeys: keys
                                         options: 
(NSDirectoryEnumerationSkipsHiddenFiles)
                                         errorHandler: nil ];

    for ( NSURL * url in enumerator )
    {
        NSNumber * isAlias = nil;
        [url getResourceValue: &isAlias forKey: NSURLIsAliasFileKey error: 
NULL];
        NSNumber * isSymlink = nil;
        [url getResourceValue: &isSymlink forKey: NSURLIsSymbolicLinkKey error: 
NULL];

        NSURL * resolvedurl;
        if ( [isAlias boolValue] )
        {
            resolvedurl = [NSURL URLByResolvingAliasFileAtURL: url
                                                      options: 
(NSURLBookmarkResolutionWithoutUI|NSURLBookmarkResolutionWithoutMounting)
                                                        error: nil ];
            if ( ! resolvedurl )
                continue;
        }
        else
        if ( [isSymlink boolValue] )
        {
            // this gets never executed
            NSString * resolvedpath = [ filemanager 
destinationOfSymbolicLinkAtPath: [url path] error: nil ];
            if ( ! resolvedpath )
                continue;
            resolvedurl = [NSURL URLWithString: resolvedpath];
        }
        else
            resolvedurl = url;
       
        NSLog( @"  Resolved path: %@", [resolvedurl path] );
        NSLog( @"  Alias = %hhd,  Symlink = %hhd.",
               [isAlias boolValue], [isSymlink boolValue]  );
    }



_______________________________________________

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:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

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

Reply via email to