2012-11-23 1 views
1

디렉토리에있는 파일을 삭제하고 난 다음 지침이 있습니다IOS는 : 내가 ASiHttpRequest로 PDF 파일을 다운로드 내 응용 프로그램에서

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

그 디렉토리에 "file.pdf는"NSLog

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

그러나 그것을가 인식이 방법을

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


} 

이 방법을 사용 충돌 후

"NSLog(@"file exist and I delete it");" 

나는 "lldb"를 consolle에만 가지고 있습니다.

+0

아마 문제가''ASIHttpRequest'' 파일이 존재하는지 감지하고 다운로드를 다시 시작된다고 가정한다에 상주, 설정하려고''allowResumeForFileDownloads''에를' 'NO'' – tkanzakic

+0

mmmm 아니요 작동하지 않습니다 ... – CrazyDev

+0

다른 옵션은 캐시 문제 일 수 있습니다. 캐시에서 응답을 얻었는지 확인하기 위해''didUseCachedResponse'' 속성 값을 검사 할 수 있습니다. 캐시되지 않도록하고,''cachePolicy''와''cacheStoragePolicy''를 가지고 놀면 캐시를 활성화/비활성화 할 수 있습니다. – tkanzakic

답변

0

을에 적응 할 수있는 몇 가지 수정을, 로컬 캐시에서 PDF 파일을 삭제하려면이 방법을 사용하고 ASIHttpRequest는 이미 동일한 이름의 파일이 있고 파일을 대체하는 대신 데이터를 파일에 추가한다는 것을 알 수 있습니다. PDF 형식에 대해서는 잘 모르겠지만 보통은 으로 읽을 수있는 파일을 병합해서는 안됩니다. 어쨌든 먼저 filemanager 클래스가 제공하는 오류 메커니즘을 사용해야합니다. NULL을 전달하는 것은 나쁘다. 아주 나쁜. 따라서 NSError 객체를 만들고 contentsOfDirectoryAtPathremoveItemAtPath 메서드에 전달한 다음 오류를 확인하고 작업이 성공적으로 완료되었는지 확인하십시오. 그 후에, 유닉스 기반 시스템은 대소 문자를 구분하므로 (시뮬레이터가 아니더라도 장치는 그렇다), example.PDF 파일은 코드에 따라 삭제되지 않으므로 확장 대문자를 검사 할 수있다.

+0

예 exa입니다. 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

내가 새 일을 다운로드하기 전에 파일을 제거하지 마십시오 당신이 당신의 필수품 대부분의 아마

- (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 : 문제를 해결 했습니까? 문제의 원인은 무엇입니까? –