Pages

Monday, January 4, 2010

Objective-C. Basic Directory Operations

NSFileManager allows to perform the basic operations with directories:
1. Detect current directory
2. Change current directory
3. Create new directory
4. Move directory
5. Delete directory.
6. Enumerate the content.
Here is a simple program demonstrating these basic directory operations:
#import <Foundation/NSObject.h>
#import <Foundation/NSString.h>
#import <Foundation/NSFileManager.h>
#import <Foundation/NSAutoreleasePool.h>

int main (int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

NSString *dirName = @"testDir";
NSString *path;
NSFileManager *fm;
BOOL success;

fm = [NSFileManager defaultManager];

path = [fm currentDirectoryPath];
NSLog(@"Current directory path is %@", path);

success = [fm createDirectoryAtPath: dirName attributes: nil];
if (success == YES)
{
success = [fm movePath: dirName toPath: @"newDir" handler: nil];

if (success == YES)
{
success = [fm changeCurrentDirectoryPath: @"newDir"];

if (success == YES)
{
path = [fm currentDirectoryPath];
NSLog(@"Current directory path is %@", path);
}
else
{
NSLog(@"Couldn't change the current directory");
}
}
else
{
NSLog(@"Couldn't rename the directory");
}
}
else
{
NSLog(@"Couldn't create directory");
}

[pool drain];
return 0;
}

The following program enumerates the directory content:
#import <Foundation/NSString.h>
#import <Foundation/NSFileManager.h>
#import <Foundation/NSAutoreleasePool.h>
#import <Foundation/NSArray.h>

int main (int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSString *path;
NSFileManager *fm;
NSDirectoryEnumerator *dirEnum;

fm = [NSFileManager defaultManager];
[fm changeCurrentDirectoryPath: @"/Users/pavelgnatyuk/Documents/Hello"];
path = [fm currentDirectoryPath];
dirEnum = [fm enumeratorAtPath: path];

NSLog(@"Content of %@:", path);

do
{
path = [dirEnum nextObject];
if (path == nil)
break;
NSLog(@"%@", path);
} while(YES);

[pool drain];
return 0;
}

Let's prevent the enumerating of the subfolders:

#import <Foundation/NSString.h>
#import <Foundation/NSFileManager.h>
#import <Foundation/NSAutoreleasePool.h>
#import <Foundation/NSArray.h>

int main (int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSString *path;
NSFileManager *fm;
NSDirectoryEnumerator *dirEnum;
BOOL flag;

fm = [NSFileManager defaultManager];
[fm changeCurrentDirectoryPath: @"/Users/pavelgnatyuk"];
path = [fm currentDirectoryPath];
dirEnum = [fm enumeratorAtPath: path];

NSLog(@"Content of %@:", path);

do
{
path = [dirEnum nextObject];
if (path == nil)
break;

NSLog(@"%@", path);

[fm fileExistsAtPath: path isDirectory: &flag];
if (flag == YES)
[dirEnum skipDescendents];

} while(YES);

[pool drain];
return 0;
}
Or just:
#import <Foundation/NSString.h>
#import <Foundation/NSFileManager.h>
#import <Foundation/NSAutoreleasePool.h>
#import <Foundation/NSArray.h>

int main (int argc, const char * argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSString *path= @"/Users/pavelgnatyuk";
NSFileManager *fm;
NSArray *dirArray;

fm = [NSFileManager defaultManager];
NSLog(@"Content of %@:", path);
dirArray = [fm directoryContentsAtPath: path];
for (path in dirArray)
NSLog(@"%@", path);

[pool drain];
return 0;
}

No comments:

Post a Comment