I'm trying to read a full File/Folder Structure (starting from a given Folder) into an NSDictionary
(with a NSArray
s,etc), like this :
Let's say starting folder is : /Users/some-user/some-path
We go in there and list all folders/subfolders/files
A/
B/
What I want is to convert this file structure (probably using enumerators and NSFileManager
) into an NSDictionary
like :
<key>folder</key>
<string>A</string>
<key>values</key>
<array>
<dict>
<key>file</key>
<string>file_a.txt</string>
<key>url</key>
<string>/Users/some-user/some-path/A/file_a.txt</string>
</dict>
<dict>
<key>file</key>
<string>file_b.txt</string>
<key>url</key>
<string>/Users/some-user/some-path/A/file_b.txt</string>
</dict>
<dict>
<key>folder</key>
<string>subfolder</string>
<key>values</key>
<array>
...
</array>
</dict>
</array>
Any ideas?
Well this is the working result :
To check if a path
is a Directory/Package/Bundle, etc :
- (BOOL)isDir:(NSString*)path
{
BOOL isDir;
if (([[NSFileManager defaultManager]
fileExistsAtPath:path isDirectory:&isDir] && isDir) ||
([[NSWorkspace sharedWorkspace] isFilePackageAtPath:path]))
return YES;
else
return NO;
}
The actual function (using recursion) :
- (NSArray*)getContents:(NSString*)path {
NSError* err = nil;
NSArray* files = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:&err];
NSMutableArray* conts = [[NSMutableArray alloc] initWithObjects: nil];
for (NSString* c in files)
{
NSDictionary* d;
NSString* p = [d stringByAppendingPathComponent:d];
if (![self isDir:p])
{
d = [NSDictionary dictionaryWithObjectsAndKeys:
c,@"name",
p,@"url", nil];
}
else
{
d = [NSDictionary dictionaryWithObjectsAndKeys:
c,@"group",
p,@"entries", nil];
}
[conts addObject:d];
}
return conts;
}