아래의 코드는 NSTask를 사용하여 디렉토리/시간 스탬프가있는 파일 하나를 만지기 만하면됩니다 (아래). 그것은 항상 잘 하나의 디렉토리에 액세스하는 애플 리케이션에서 작동하지만, 그것은 자주 그것의 데이터 중 일부에 액세스하기 위해 디렉토리를 변경하는 다른 않습니다. 내가 현재 파일과 현재 경로를 확인할 때 그들은 모두 올바른 경로를 보여줍니다. 나는 내가 생각할 수있는 모든 가능성을 만료했다. 어떤 도움이라도 대단히 감사 할 것입니다 - 감사합니다.Objective-C, NSTask가 파일을 건드릴 수 없습니다.
- (void)someMethod:(NSString *)currentfile {
NSFileManager *filemanager = [[NSFileManager alloc] init];
if ([filemanager changeCurrentDirectoryPath: @"/"] == NO)
NSLog (@"Cannot change directory.\n");
NSString *currentpath = [filemanager currentDirectoryPath];
NSLog (@"Current directory is %@", currentpath);
[filemanager release];
NSArray*arguments = [NSArray arrayWithObjects:@"-r",currentpath,currentfile,nil];
[self touchFiles:arguments];
return;
}
- (void)touchFiles:(NSArray *)arguments {
NSTask *task = [[NSTask alloc] init];
[task setLaunchPath:@"/usr/bin/touch"];
[task setArguments:arguments];
[task launch];
[task release];
return;
}
현재 디렉터리는 스레드 단위가 아니라 프로세스 단위임을 유의하십시오. 따라서 동시 스레드가있는 경우 현재 디렉터리를 변경하고 가져 오는 것이 경쟁적으로 이루어지지 않을 수 있습니다. –
@MattiasWadman, 내가 시도한 모든 것이 같은 결과로 끝나기 때문에 그것이 경쟁 조건이라고 생각합니다. 어떻게 그러한 것들을 효과적으로 처리 할 수 있습니까? –
이 코드가 실제 코드입니까? 디렉토리를 항상 "/"(루트)로 변경합니까? /와 파일을 모두주고 싶어하는 이유는 무엇입니까? 만약 당신이 오직 디렉토리 경로 등 내가'NSString' 경로 메서드를 사용해야한다고 생각 변경 dir 물건을 사용합니다. 그렇지 않다면'@synchronize'와 같은 잠금 메커니즘을 사용하여 코드를 원자 적으로 만들 수 있습니다. –