-
Notifications
You must be signed in to change notification settings - Fork 2
Working_with_Directories_Files_in_IOS
anarcher edited this page Aug 27, 2011
·
1 revision
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();
Foundation framework은 file/directory의 작업에 필요한 3가지 클래스를 제공한다.
NSFileManager은 file의 생성,삭제,수정,속성읽기등의 작업을 담당한다.
NSFileManager *filemgr;
filemgr = [NSFileManager defaultManager];
currentPath = [filemgr currentDirectoryPath];
[filemgr release];
NSFileHandle은 file의 특정 위치로 seeking하는 등의 작업을 담당한다.
NSData은 file 내용에 대한 buffer이다.
현재 작업중인 디렉토리를 변경하기
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];
새로운 디렉토리 만들기
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];
디렉토리 삭제하기
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];
디렉토리의 정보(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];
NSFileManager *filemgr;
filemgr = [NSFileManager defaultManager];
if ([filemgr fileExistsAtPath: @"/tmp/myfile.txt" ] == YES)
NSLog (@"File exists");
else
NSLog (@"File not found");
[filemgr release];
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];
파일읽기
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];