2012-11-23 46 views
1

在我的應用我下載一個PDF文件與ASiHttpRequest刪除一個文件,我有以下說明:IOS:在目錄

NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
    [currentDownload setDownloadDestinationPath:[documentsDirectory stringByAppendingPathComponent:@"file.pdf"]]; 

它做工精細,在第一時間,我可以打開這個file.pdf ,但是當我第二次下載這個pdf時,它似乎並沒有替換文件,而是進行了合併。

之前,我這樣做,但它不起作用,問題出在哪裏,或從它的路徑中刪除此file.pdf的最佳方法是什麼?

- (void) removeFile{ 
    NSString *extension = @"pdf"; 
    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectoryPDF = [paths objectAtIndex:0]; 

    NSArray *contents = [fileManager contentsOfDirectoryAtPath:documentsDirectoryPDF error:NULL]; 
    NSEnumerator *e = [contents objectEnumerator]; 
    NSString *filename; 
    while ((filename = [e nextObject])) { 

     if ([[filename pathExtension] isEqualToString:extension]) { 

      [fileManager removeItemAtPath:[documentsDirectoryPDF stringByAppendingPathComponent:filename] error:NULL]; 
     } 
    } 
} 

編輯

現在我用這個方法

- (void) removeFile{ 


    NSError *error; 

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,  NSUserDomainMask, YES); 
    NSString *path = [[paths objectAtIndex:0]stringByAppendingString:@"/file.pdf"]; 

    NSFileManager *fileManager = [NSFileManager defaultManager]; 

    NSLog(@"Documents directory before: %@", [fileManager contentsOfDirectoryAtPath:[paths objectAtIndex:0] error:&error]); 


     if([fileManager fileExistsAtPath:path] == YES) 
     { 
      NSLog(@"file exist and I delete it"); 

      NSFileManager *fileManager = [NSFileManager defaultManager]; 
      [fileManager removeItemAtPath:path error:&error]; 

      NSLog(@"error:%@", error); 
     } 

    NSLog(@"Documents directory after: %@", [fileManager contentsOfDirectoryAtPath:[paths objectAtIndex:0] error:&error]); 


} 

這種方法認識到,在目錄中有 「file.pdf」 中的NSLog

NSLog(@"Documents directory before: %@", [fileManager contentsOfDirectoryAtPath:[paths objectAtIndex:0] error:&error]); 

但在

之後崩潰
"NSLog(@"file exist and I delete it");" 

和我只有一個「lldb」在CONSOLle。

+0

也許問題駐留在''ASIHttpRequest''正在檢測該文件存在,並假設你是恢復下載,嘗試設置''allowResumeForFileDownloads''到' 'NO'' – tkanzakic

+0

mmmm不,它不起作用... – CrazyDev

+0

好的,另一個選項可能是緩存問題,您可以檢查屬性「didUseCachedResponse」的值以檢查響應是從緩存中獲取的還是不是,並玩''cachePolicy''和''cacheStoragePolicy''你可以啓用/禁用緩存 – tkanzakic

回答

0

最可能的是你沒有下載一個新的之前刪除的文件, ASIHttpRequest發現已經有一個具有相同名稱的文件並將數據附加到它上面,而不是替換文件。我不確定PDF格式,但通常不會導致合併的可讀的文件。無論如何,首先你需要使用filemanager類爲你提供的錯誤機制。傳遞NULL是不好的。很壞。因此,創建一個NSError對象並將其傳遞給contentsOfDirectoryAtPathremoveItemAtPath方法,然後檢查錯誤,確保操作成功完成。之後,你也可以檢查擴展名大寫,因爲基於Unix的系統區分大小寫(儘管模擬器不是,該設備是),並且example.PDF文件不會根據您的代碼被刪除。

+0

是的,它的實例ct問題,我有...我嘗試錯誤,但沒有錯誤...所以我嘗試用文件的大寫擴展名... – CrazyDev

+0

什麼都沒有...我曾經有一個文件的「合併」... – CrazyDev

+0

我有一個「contentsOfDirectoryAtPath」錯誤,它是錯誤日誌:錯誤:錯誤域= NSCocoaErrorDomain代碼= 256「操作無法完成。 (Cocoa error 256.)「UserInfo = 0xbc40500 {NSUnderlyingError = 0xbc40e70」操作無法完成。不是目錄「,NSFilePath =/var/mobile/Applications/345B9530-74FF-49DE-AF39-418D03C9A149/Documents/file。pdf,NSUserStringVariant =( 文件夾 – CrazyDev

3

我用這個方法從本地緩存中刪除PDF文件,有一些修改,就可以使其適應你的必需品

- (void)removePDFFiles 
{ 
    NSFileManager *fileMngr = [NSFileManager defaultManager]; 

    NSArray *cacheFiles = [fileMngr contentsOfDirectoryAtPath:[self cacheDirectory] 
                error:nil]; 
    for (NSString *filename in cacheFiles) { 
     if ([[[filename pathExtension] lowercaseString] isEqualToString:@"pdf"]) { 
      [fileMngr removeItemAtPath:[NSString stringWithFormat:@"%@/%@", [self cacheDirectory], filename] error:nil]; 
     } 
    } 
} 
+0

好吧我會嘗試.... – CrazyDev

0

嘗試以下操作:

-(BOOL) removePDF 
{ 
    BOOL removeStatus = NO; 

    NSArray *dirPaths; 
    NSString *docsDir; 

    dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 
               NSUserDomainMask, YES); 

    docsDir = [dirPaths objectAtIndex:0]; 

    NSString* fileName = @"file.pdf"; //your file here.. 

    NSString* filePath = [NSString stringWithFormat:@"%@/%@", docsDir, fileName]; 

    if([[NSFileManager defaultManager] fileExistsAtPath:filePath] == YES) 
    { 
     removeStatus = [[NSFileManager defaultManager] removeItemAtPath:filePath]; 
    } 
    return removeStatus; 
} 
+0

@blackguardian:你是否解決了這個問題?這個問題的原因是什麼? –