我正在尝试删除文件,但不知何故nsfilemanager不允许我这样做。我在一行代码中使用该文件,但是一旦运行了该操作,我希望删除该文件。我已经记录了错误代码和消息,我得到错误代码:4和消息:
"text.txt" could not be removed
有没有办法“干净地”解决这个错误(没有任何黑客攻击),以便苹果将这个应用程序接受到他们的Mac App Store上?
编辑:
这就是我正在使用的:
[[NSFileManager defaultManager] removeItemAtPath:filePath error:NULL];
谢谢,
凯文
答案 0 :(得分:12)
错误代码4似乎是NSNoSuchFileError。如果您要删除的文件确实存在,那么您的路径错误。如果您希望我们确切地告诉您如何弄错路径,则需要发布一些代码。
如果文件不存在,您可以忽略该错误。
答案 1 :(得分: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)
答案 2 :(得分: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];
用它来解决你的问题。
答案 3 :(得分:2)
您的路径不正确
使用以下
NSString *str = [outputFieldURL path];
而不是
NSString *str = [outputFieldURL absoluteString];
方法“removeItemAtPath:”需要文件的本地路径,如果要使用网址删除,则应使用-removeItemAtURL:
答案 4 :(得分:0)
当你使用NSFileManager时,我只是想出了一些非常重要的东西。您必须了解App Sandboxing。
let documentDirectory = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, .UserDomainMask, true)[0]
此行返回应用程序沙箱的路径文档目录。在文档目录中使用FileManager创建文件时(例如),不要保存完整的文件路径,只保存当前文档目录中的路径。
您将能够重新创建所创建文件的完整路径。
希望(5年后)帮助开发人员; - )
答案 5 :(得分:0)
默认方法AFNetworking 3.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;
}