1

私のアプリでは、ASiHttpRequestを含むPDFファイルをダウンロードし、次の手順を実行します。

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

最初は正常に動作し、このfile.pdfを開くことができますが、このpdfを2回ダウンロードすると、ファイルが置き換えられるのではなく、マージされるようです。

私がこれを行う前に、それは問題がどこにあるのか、またはそのパスからこの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]);


}

このメソッドは、ディレクトリにNSLogに「file.pdf」があることを認識します

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

しかし、それは後にクラッシュします

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

そして、私はコンソールに「lldb」しか持っていません。

4

3 に答える 3

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];
        }
    }
}
于 2012-11-23T11:54:44.833 に答える
0

ほとんどの場合、新しいファイルをダウンロードする前にファイルを削除しないでください。ASIHttpRequestは、同じ名前のファイルが既に存在することを確認し、ファイルを置き換える代わりにデータを追加します。PDF形式についてはよくわかりませんが、通常、読み取り可能なファイルがマージされることはありません。いずれにせよ、最初にファイルマネージャクラスが提供するエラーメカニズムを使用する必要があります。NULLを渡すのは悪いことです。ひどい。したがって、NSErrorオブジェクトを作成し、それをcontentsOfDirectoryAtPathandremoveItemAtPathメソッドに渡してから、エラーをチェックし、操作が正常に行われたことを確認します。その後、拡張子の大文字も確認することをお勧めします。Unixベースのシステムでは大文字と小文字が区別され(シミュレーターではありませんが、デバイスでは異なります)example.PDF、コードに基づいてファイルが削除されることはありません。

于 2012-11-23T12:25:19.083 に答える
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;
}
于 2012-11-23T12:32:35.677 に答える