Skip to content

Working_with_Directories_Files_in_IOS

anarcher edited this page Aug 27, 2011 · 1 revision

IOS에서 Directories와 Files 사용하기

Application Document Directory

iOS도 기타 다른 OS처럼 파일 시스템을 가지고 있는데. Unix 관례를 따른 파일 경로를 가지고 있다. 단, iOS는 Application간의 데이터나 메모리,파일을 공유할수 없다. 파일시스템에 대해서는, iOS은 Documents와 tmp 디렉토리만 접근 할수 있는 제한이 있다. Application은 Documents와 tmp 하위에만 파일이나 디렉토리를 만들거나 수정 삭제 할수 있다.

각 Application마다 Documents와 tmp의 위치를 다르기 때문에, 정확한 위치를 알려면, iOS에 물어봐야 한다.

NSArray *dirPaths;
NSString *docsDir;
dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); 
docsDir = [dirPaths objectAtIndex:0];                                                          

NSSearchPathForDirectoriesInDomains은 C function이다.

docsDir은 다음과 같은 경로이다.

/Users/<user name>/Library/Application Support/iPhone Simulator/<sdk version>/Applications/<app id>/Documents

/var/mobile/Applications/<app id>/Documents

임시 디렉토리는 다음과 같이 경로를 얻을 수 있다.

NSString *tmpDir = NSTemporaryDirectory();

NSFileManager,NSFileHandle,NSData

Foundation framework은 file/directory의 작업에 필요한 3가지 클래스를 제공한다.

NSFileManager

NSFileManager은 file의 생성,삭제,수정,속성읽기등의 작업을 담당한다.

NSFileManager *filemgr;
filemgr = [NSFileManager defaultManager];
currentPath = [filemgr currentDirectoryPath];
[filemgr release];

NSFileHandle

NSFileHandle은 file의 특정 위치로 seeking하는 등의 작업을 담당한다.

NSData

NSData은 file 내용에 대한 buffer이다.

Working with Directory

Changing Directory

현재 작업중인 디렉토리를 변경하기

NSArray *dirPaths;NSString *docsDir;
filemgr =[NSFileManager defaultManager];

dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
docsDir = [dirPaths objectAtIndex:0];

if ([filemgr changeCurrentDirectoryPath: docsDir] == NO)
{
    // Directory does not exist – take appropriate action
}
[filemgr release];

Creating new directory

새로운 디렉토리 만들기

NSFileManager *filemgr;
NSArray *dirPaths;
NSString *docsDir;
NSString *newDir;

filemgr =[NSFileManager defaultManager];

dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 
NSUserDomainMask, YES);

docsDir = [dirPaths objectAtIndex:0];

newDir = [docsDir stringByAppendingPathComponent:@"data"];

if ([createDirectoryAtPath:newDir withIntermediateDirectories:YES attributes:nil error: NULL] == NO)
{
    // Failed to create directory
}
[filemgr release];

Deleting a directory

디렉토리 삭제하기

NSFileManager *filemgr;
NSArray *dirPaths;
NSString *docsDir;
NSString *newDir;

filemgr =[NSFileManager defaultManager];

dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 
NSUserDomainMask, YES);

docsDir = [dirPaths objectAtIndex:0];

newDir = [docsDir stringByAppendingPathComponent:@"data"];

if ([filemgr removeItemAtPath: newDir error: nil] == NO)
{
    // Directory removal failed.
}
[filemgr release];

Listing Contents of a directory

디렉토리의 정보(sub directory,file) 목록 얻기

FileManager *filemgr;
NSArray *filelist;
int count;
int i;

filemgr =[NSFileManager defaultManager];
filelist = [filemgr contentsOfDirectoryAtPath:@"/" error:NULL];
count = [filelist count];
    
for(i = 0; i < count; i++)
{
    NSLog(@"%@", [filelist objectAtIndex: i]);
}
[filemgr release];

Working with Files

file이 존재하는지 체크하기

NSFileManager *filemgr;
filemgr = [NSFileManager defaultManager];

if ([filemgr fileExistsAtPath: @"/tmp/myfile.txt" ] == YES)
        NSLog (@"File exists");
else
        NSLog (@"File not found");
[filemgr release];

Moving,renaming a file

NSFileManager *filemgr;

filemgr = [NSFileManager defaultManager];
if ([filemgr moveItemAtPath: @"/tmp/myfile.txt" toPath: @"/tmp/newfile.txt" error: NULL]  == YES)
        NSLog (@"Move successful");
else
        NSLog (@"Move failed");
[filemgr release];

Writing and Reading file

파일읽기

NSFileManager *filemgr;
NSData *databuffer;

filemgr = [NSFileManager defaultManager];

databuffer = [filemgr contentsAtPath: @"/tmp/myfile.txt" ];
[filemgr release];

파일생성

databuffer = [filemgr contentsAtPath: @"/tmp/myfile.txt" ];

[filemgr createFileAtPath: @"/tmp/newfile.txt" contents: databuffer attributes: nil];
[filemgr release];