Basic File Operations

Let’s say we intend to create folder MyFolder inside the Documents directory. Starting with the path string docs pointing at the Documents directory (as obtained in the previous section), we can generate a reference to MyFolder, using one of the many NSString methods specifically aimed at manipulating path strings. (There is no way to create a folder specified by a URL.) We can then use an NSFileManager instance (fm) to learn whether our target folder exists, and to create it if it doesn’t:

NSString* myfolder = [docs stringByAppendingPathComponent:@"MyFolder"];
BOOL exists = [fm fileExistsAtPath:myfolder];
if (!exists) {
    NSError* err = nil;
    [fm createDirectoryAtPath:myfolder withIntermediateDirectories:NO
                   attributes:nil error:&err];
    // error-checking omitted
}

To learn what files and folders exist within a directory, you can ask for an array of the directory’s contents:

NSError* err = nil;
NSArray* arr = [fm contentsOfDirectoryAtPath:docs error:&err];
// error-checking omitted
/*
MyFolder
*/

That array is shallow, showing only the directory’s immediate contents. For a deep array, ask for the directory’s subpaths:

NSError* err = nil;
NSArray* arr = [fm subpathsOfDirectoryAtPath:docs error:&err];
// error-checking omitted
/*
MyFolder
MyFolder/moi.txt
*/

A deep array might be very big. If you’re looking for something in particular, you might prefer to enumerate the directory, so that you are handed only one file reference at a time:

NSDirectoryEnumerator* dir = [fm enumeratorAtPath:docs]; ...

Get Programming iOS 4 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.