2011-01-07 2 views
3

파일을 삭제하려고하는데 어떻게 든 nsfilemanager가 허용하지 않습니다. 한 줄의 코드에서 파일을 사용하지만 일단 해당 작업이 실행되면 파일을 삭제하고 싶습니다. 나는 오류 코드와 메시지를 기록하고 난 오류 코드 수 : 4 메시지 : 코코아 - NSFileManager removeItemAtPath가 작동하지 않습니다.

"text.txt" could not be removed 

는 "깨끗하게"(모든 해킹하지 않고)이 오류를 수정하는 방법이 있나요 그래서 사과에이 응용 프로그램을 수락를 그들의 맥 앱 스토어?

편집 :

[[NSFileManager defaultManager] removeItemAtPath:filePath error:NULL]; 

감사합니다,

케빈

+0

안녕하세요 Kevin, 앞으로 어떤 일이 벌어지는 지 알 수 있도록 코드를 게시 할 수 있습니까? 또한이 프로그램은 'BLAuthentication'에 필요한 것과 동일한 응용 프로그램입니까? –

+0

와우, 같은 질문으로 다시 만난 재밌 네요? 다른 점이 없으며이 점에서 App Store에 제출할 것입니다.이 경우 App Store에서는 "루트 액세스"를 허용하지 않습니다. 나는 내가 사용하는 것을 포함하도록 질문을 변경했다. – lab12

+0

'unlink ([filePath fileSystemRepresentation]);'을 사용해보십시오. 이것은 파일을 지우는 POSIX 방식입니다. – dreamlax

답변

11

오류 코드 4는 NSNoSuchFileError 인 것 같습니다. 삭제하려는 파일이 실제로 존재하면 경로가 잘못되었습니다. 어떻게하면 경로가 잘못되었는지 정확하게 알려주려면 코드를 게시해야합니다.

파일이 없으면 오류를 무시할 수 있습니다. 사용 제거 할 경우, 파일의 로컬 경로를 필요

+0

안녕하세요,이 문제에 직면 해 내 파일 이름이 잘못되었습니다. 파일 이름이 잘못되었거나 파일 경로가 잘못되었으므로 오류 코드 4가 나타납니다. – GeneCode

+0

@Rocotilos : "파일 경로"는 일반적으로 파일의 실제 이름을 포함합니다. – JeremyP

+0

일반적으로 문서/소스에서 실제 오류를 찾는 방법은 무엇입니까? – fabian789

2

먼저 다음 삭제할 수 있습니다 문서 디렉토리의 경로를 선택해야합니다

이것은 내가 사용하고 무엇인가 파일. 제거 명령문 만 충분하지 않습니다.

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

    NSString *databaseFile = [documentsDirectoryPath stringByAppendingPathComponent:@"text.txt"]; 

    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    [fileManager removeItemAtPath:databaseFile error:NULL]; 

문제를 해결하는 데 사용하십시오.

2

경로가 잘못

를 사용하여 다음과 같은

NSString *str = [outputFieldURL path]; 

대신

NSString *str = [outputFieldURL absoluteString]; 

의 방법 "removeItemAtPath"입니다 URL을 사용해야합니다. -removeItemAtURL:

+0

"Path"패밀리 중 하나와 작업 할 때 Code : 4 오류에 대한 답변을 찾는 사람들은 이것이 가장 먼저 확인해야 할 사항입니다. NSURL absoluteString을 사용하면 앞에 "file : ///"이 붙어서이 오류가 발생합니다. –

3

나는 어떤 이유로 fileManager.removeItemAtPath가 작동하지 않고 fileManager.removeItemAtURL (fileURL)으로 fileManager.removeItemAtPath (filePath)를 변경했는데 제대로 작동합니다.

let fileManager = NSFileManager() 
    let documentsFolderUrl = fileManager.URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: false, error: nil) 

    let soundURL = documentsFolderUrl!.URLByAppendingPathComponent(recording.path) 
    let stringTrimmedFilePath = "trimmed_\(recording.path)" 
    let trimmedSoundURL = documentsFolderUrl!.URLByAppendingPathComponent(stringTrimmedFilePath) 
    var error: NSError? 
    fileManager.removeItemAtURL(trimmedSoundURL, error: &error) 
+0

fileManager.removeItemAtPath에 버그가있는 것 같습니다. – etayluz

0

NSFileManager를 사용할 때 매우 중요한 것으로 밝혀졌습니다. App Sandboxing에 대해 알고 있어야합니다.

let documentDirectory = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, .UserDomainMask, true)[0] 

이 행은 앱의 경로 문서 디렉토리를 샌드위치 처리하여 반환합니다. 예를 들어 문서 디렉토리에 FileManager 파일을 만들 때 전체 파일 경로는 저장하지 않고 현재 문서 디렉토리의 경로 만 저장합니다.

만든 파일의 전체 경로를 다시 만들 수 있습니다.

희망자 (5 년 후) 개발자보다 도움을 받으십시오.

관련 문제