Файловая структура дерева в NSDictionary - PullRequest
1 голос
/ 16 марта 2012

Я пытаюсь прочитать полную структуру файла / папки (начиная с заданной папки) в NSDictionaryNSArray s и т. Д.), Например:

Допустим, начинаяпапка: / Users / some-user / some-path

Заходим туда и перечисляем все папки / подпапки / файлы

A /

  • file_a.txt
  • file_b.txt
  • вложенная папка /
    • file_c.txt

B /

  • и т.д ...

Я хочу преобразовать эту файловую структуру (возможно, с использованием перечислителей и NSFileManager) в NSDictionary, например:

<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>

Есть идеи?

1 Ответ

1 голос
/ 16 марта 2012

Ну, это рабочий результат:

Чтобы проверить, является ли path каталогом / пакетом / комплектом и т. Д .:функция (с использованием рекурсии):

- (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;
}
...