2011-01-07 7 views
3

ファイルを削除しようとしていますが、何とかnsfilemanagerで許可しません。 1行のコードでファイルを使用しますが、そのアクションが実行されると、ファイルを削除します。私は、エラーコードとメッセージを記録していると私は、エラーコードを取得:4とメッセージを:Cocoa - NSFileManager removeItemAtPathが機能しない

"text.txt" could not be removed 

は、(任意のハックなし)「きれいに」このエラーを修正する方法はありますAppleが上にこのアプリを受け入れるように、彼らのMac App Store?

EDIT:

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

おかげで、

ケビン

+0

こんにちはケビン以上(5年後)ヘルプは、あなたがより多くのコードを投稿することができますか?また、これは 'BLAuthentication'のために必要としたのと同じアプリケーションですか? –

+0

もう一度同じ質問で会ったうわー、おかしい?異なるものはありません。この1つでは、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"ファミリーファミリーのいずれかを使用している場合のエラーは、まずチェックしてください。 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を使用してファイルを作成する場合(たとえば、ファイルの完全パスは保存せず、現在のドキュメントディレクトリのパスのみを保存します)

作成したファイルの完全なパスを再作成することができます。

我々は何が起こっているのを見ることができるように希望開発者;-)

関連する問題