4

ファイルを削除しようとしていますが、どういうわけかnsfilemanagerで削除できません。1行のコードでファイルを使用しますが、そのアクションが実行されたら、ファイルを削除します。エラーコードとメッセージをログに記録しましたが、エラーコード:4とメッセージが表示されます:

"text.txt" could not be removed

AppleがこのアプリをMacAppStoreで受け入れるように、このエラーを「クリーンに」(ハッキングなしで)修正する方法はありますか?

編集:

これは私が使用しているものです:

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

ありがとう、

ケビン

4

6 に答える 6

13

エラーコード4はNSNoSuchFileErrorのようです。削除したいファイルが本当に存在する場合は、パスが間違っています。パスを間違えた方法を正確に教えてほしい場合は、コードを投稿する必要があります。

ファイルが存在しない場合は、エラーを無視できます。

于 2011-01-07T09:37:42.043 に答える
3

swiftでも同様の問題が発生しました。何らかの理由で、fileManager.removeItemAtPathが機能せず、fileManager.removeItemAtPath(filePath)をfileManager.removeItemAtURL(fileURL)に変更しましたが、正常に機能します。

    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)
于 2015-03-09T19:47:59.320 に答える
2

まず、ドキュメントディレクトリのパスを選択する必要があります。次に、ファイルを削除できます。removeステートメントだけでは不十分です。

   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];

あなたの問題を解決するためにこれを使用してください。

于 2011-01-07T04:59:52.540 に答える
2

あなたの道は間違っています

以下を使用してください

NSString *str = [outputFieldURL path];

それ以外の

NSString *str = [outputFieldURL absoluteString];

メソッド「removeItemAtPath:」にはファイルのローカルパスが必要です。urlを使用して削除する場合は、次を使用する必要があります。-removeItemAtURL:

于 2013-11-05T07:29:04.690 に答える
0

NSFileManagerを使用するときに、非常に重要なことからそれを理解します。アプリのサンドボックス化に注意する必要があります。

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

この行は、サンドボックス化されたアプリのパスドキュメントディレクトリを返します。ドキュメントディレクトリにFileManagerを使用してファイルを作成する場合(たとえば)、完全なファイルパスを保存せず、現在のドキュメントディレクトリからのパスのみを保存します。

作成したファイルのフルパスを再作成できます。

(5年後)開発者を助けてくれることを願っています;-)

于 2016-09-02T15:07:59.223 に答える
0

デフォルトの方法AFNetworking3.0は、ダウンローダーファイルを更新しません。

このファイルをObjective-C+iOS9.0で書き直したい場合は、次のことを行う必要があります。

- (NSURLSessionDownloadTask *) downloadDocsFromUrl:(NSString *) url withSuccesBlock:(DocModelBlock) docModelBlock withErrorBlock:(ErrorBlock) errorBlock {

    NSURL *URL = [NSURL URLWithString:url];
    NSURLRequest *request = [NSURLRequest requestWithURL:URL];

    NSURLSessionDownloadTask *downloadTask = [self.sessionManager downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {

        NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
        NSFileManager *fileManager = [NSFileManager defaultManager];
        NSError *error;

        NSURL *documentsDirectoryURL = [fileManager URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:&error];

        if ([httpResponse statusCode] == 200) {
            NSURL *urlPath = [documentsDirectoryURL URLByAppendingPathComponent:[response suggestedFilename]];

            if ([fileManager fileExistsAtPath:urlPath.path]) {
                [fileManager removeItemAtPath:urlPath.path error:&error];
            }
        }

        return [documentsDirectoryURL URLByAppendingPathComponent:[response suggestedFilename]];
    } completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
        if (error) {
            errorBlock(error);
        } else {
            docModelBlock(filePath);
        }
    }];
    [downloadTask resume];

    return downloadTask;
}
于 2018-03-27T14:54:30.313 に答える