2012-07-12 51 views
2

我保存NSDocumentDirectory這樣:刪除在NSDocumentDirectory

NSLog(@"%@", [info objectAtIndex:i]); 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask ,YES); 
NSString *documentsDir = [paths objectAtIndex:0]; 
NSString *savedImagePath = [documentsDir stringByAppendingPathComponent:[NSString stringWithFormat:@"Images%d.png", i]]; 

ALAssetRepresentation *rep = [[info objectAtIndex: i] defaultRepresentation]; 
UIImage *image = [UIImage imageWithCGImage:[rep fullResolutionImage]]; 

//----resize the images 
image = [self imageByScalingAndCroppingForSize:image toSize:CGSizeMake(256,256*image.size.height/image.size.width)]; 

NSData *imageData = UIImagePNGRepresentation(image); 
[imageData writeToFile:savedImagePath atomically:YES]; 

我知道如何刪除NSDocumentDirectory所有圖像。

但我想知道如何刪除名稱爲oneSlotImages的所有圖像。

謝謝

+0

您是否應該在用戶的文檔目錄中刪除文件而不知曉並同意? – trojanfoe 2012-07-12 10:40:34

+0

我保存圖像。然後我想刪除他們和reADDing,更新如。 – Bazinga 2012-07-12 10:42:26

+0

那麼這似乎是合理的,但是[NSData writeToFile:atomically:]'會覆蓋文件,所以不需要先刪除它們。 – trojanfoe 2012-07-12 10:50:33

回答

5

試試這個,只需複製該代碼,名稱爲oneSlotImages您的圖像,將從DocumentDirectory被刪除,它只是簡單:

NSArray *directoryContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject] error:NULL]; 

    if([directoryContents count] > 0) 
    { 
     for (NSString *path in directoryContents) 
     { 
      NSString *fullPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject] stringByAppendingPathComponent:path]; 

      NSRange r =[fullPath rangeOfString:@"oneSlotImages"]; 
      if (r.location != NSNotFound || r.length == [@"oneSlotImages" length]) 
      { 
       [[NSFileManager defaultManager] removeItemAtPath:fullPath error:nil]; 
      } 
     } 
    } 
+0

好的答案的方式!感謝您:) – Bazinga 2012-07-12 11:47:23

+0

嗨如何在NSCache中刪除這種方式? – Bazinga 2012-08-29 16:40:53

+0

你可以將'NSDocumentDirectory'改爲'NSCache'.Did你試試這種方式嗎? – Dhruv 2012-08-30 04:18:44

2

你看過NSFileManager的方法嗎?也許像這樣的東西叫所有的圖像循環。

[[NSFileManager defaultManager] removeItemAtPath:imagePath error:NULL]; 
1

使用像,

NSArray *dirFiles = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:strDirectoryPath error:nil]; 
NSArray *zipFiles = [dirFiles filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self CONTAINS[cd] %@", @"oneSlotImages"]]; 

數組zipFiles包含了所有我們過濾文件的名稱。因此,通過在循環中將文件名的完整路徑添加到文件名中,您可以創建陣列中所有已過濾文件的完整文件路徑。然後你可以使用一個循環,並呼籲NSFileManager對象的方法,如下面

[fileManager removeItemAtPath: strGeneratedFilePath error: &err]; 

其從目錄路徑刪除ITM。

通過這種方式,您可以過濾掉包含oneSlotImages的文件名。所以你可以更喜歡刪除這些。希望這可以幫助你。

+0

那麼如何刪除這些zip文件? – Bazinga 2012-07-12 10:58:22

+0

看到編輯!!! – 2012-07-12 11:05:21

+0

什麼是strDirectoryPath和strGeneratedFilePath – Bazinga 2012-07-12 11:24:40

0

由於這是一個老問題,現在,也高於解答說明如何刪除通過圖像名稱。如果我想一次從NSDocumentDirectory刪除所有內容,請使用下面的代碼。

// Path to the Documents directory 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
if ([paths count] > 0) 
{ 
    NSError *error = nil; 
    NSFileManager *fileManager = [NSFileManager defaultManager]; 

    // Print out the path to verify we are in the right place 
    NSString *directory = [paths objectAtIndex:0]; 
    NSLog(@"Directory: %@", directory); 

    // For each file in the directory, create full path and delete the file 
    for (NSString *file in [fileManager contentsOfDirectoryAtPath:directory error:&error]) 
    {  
    NSString *filePath = [directory stringByAppendingPathComponent:file]; 
    NSLog(@"File : %@", filePath); 

    BOOL fileDeleted = [fileManager removeItemAtPath:filePath error:&error]; 

    if (fileDeleted != YES || error != nil) 
    { 
     // Deal with the error... 
    } 
    } 

}