问题
I have created a app that stores video, now I want to remove that video when a user clicks a remove button. I am using AVFoundation for record video.
My app camera gives me an output URL like this:
file://localhost/private/var/mobile/Applications/4B2E02E5-3EE2-493E-8ECF-4B1DA29B9387/tmp/output.mov
I have tried this but it did not work:
- (void) removeFile:(NSURL *)fileURL
{
NSString *filePath = [fileURL path];
NSFileManager *fileManager = [NSFileManager defaultManager];
if ([fileManager fileExistsAtPath:filePath]) {
NSLog(@"here it is : %@",fileURL);
NSError *error;
// Attempt to delete the file at filePath2
if ([fileManager removeItemAtPath:filePath error:&error] != YES)
NSLog(@"Unable to delete file: %@", [error localizedDescription]);
// Show contents of Documents directory
NSLog(@"Documents directory: %@",
[fileManager contentsOfDirectoryAtPath:filePath error:&error]);
}
}
EDIT
- (IBAction)videoWillDelete:(id)sender {
NSString *strPath = [NSHomeDirectory() stringByAppendingPathComponent:@"output.mov"];
NSLog(@"file is:%@",strPath);
if ([[NSFileManager defaultManager] isDeletableFileAtPath:strPath]==YES) {
NSLog(@"file is deletebale");
}else {
NSLog(@"file is not deletebale");
}
NSError *error;
if ([[NSFileManager defaultManager] isDeletableFileAtPath:strPath]) {
BOOL success = [[NSFileManager defaultManager] removeItemAtPath:strPath error:&error];
if (!success) {
NSLog(@"Error removing file at path: %@", error.localizedDescription);
}
}
}
My log file has:
2012-11-02 17:33:21.836 AVFoundationCam[1791:707] file is:/var/mobile/Applications/4B2E02E5-3EE2-493E-8ECF-4B1DA29B9387/output.mov
2012-11-02 17:33:21.838 AVFoundationCam[1791:707] file is not deletebale
This function is what I use to store data in the iPhone:
else {
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library writeVideoAtPathToSavedPhotosAlbum:outputFileURL
completionBlock:^(NSURL *assetURL, NSError *error) {
if (error) {
if ([[self delegate] respondsToSelector:@selector(captureManager:didFailWithError:)]) {
[[self delegate] captureManager:self didFailWithError:error];
}
}
if ([[UIDevice currentDevice] isMultitaskingSupported]) {
[[UIApplication sharedApplication] endBackgroundTask:[self backgroundRecordingID]];
}
if ([[self delegate] respondsToSelector:@selector(captureManagerRecordingFinished:)]) {
[[self delegate] captureManagerRecordingFinished:self];
}
}];
//[library release];
}
}
回答1:
U can get Document Directory path like this:
NSString *strPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
Now remove item like this:
NSError *error;
if ([fileManager fileExistsAtPath:path]) {
if ([[NSFileManager defaultManager] isDeletableFileAtPath:strPath]) {
BOOL success = [[NSFileManager defaultManager] removeItemAtPath:strPath error:&error];
if (!success) {
NSLog(@"Error removing file at path: %@", error.localizedDescription);
}
else
{
NSLog(@"File removed at path: %@", error.localizedDescription);
}
}
else
{
NSLog(@"file not exists");
}
回答2:
Check [NSHomeDirectory() stringByAppendingPathComponent:@"tmp/output.mov"]; is the same with the outputFileURL in [library writeVideoAtPathToSavedPhotosAlbum:outputFileURL
completionBlock:^(NSURL *assetURL, NSError *error) {
回答3:
answer is Simple, you cannot delete file from Document Directory. Its Readable and writeable only.
You can achieve your purpose by giving path for tmp directory , and then for saving purpose move it from the tmp path to document directory. Thats it.
来源:https://stackoverflow.com/questions/13193661/i-have-video-url-and-want-to-delete-it-from-the-iphone-using-this-url