2013-04-10 16 views
1

У меня есть приложение, которое создает файл, сжимает его в ZIP-файл, а затем прикрепляет его к электронной почте. Но файл .zip содержит много каталогов перед фактическим файлом. Начиная с «/», которая является безымянной папкой и выглядит невидимой для людей, получающих ее. Каталог верхнего уровня «/», то следующий уровень «ком» ...
/var/mobile/Applications/CDA16BB231BDABABBA/Documents/data.txtСтруктура папки Objective-Zip ios

Как я могу удалить все каталоги и имеют. zip-файл содержит только файл?

Вот код, который я использовал ...

NSError *error; 
    NSString *documentsDirectory = [NSHomeDirectory() 
            stringByAppendingPathComponent:@"Documents"]; 
    NSString *filePath = [documentsDirectory 
          stringByAppendingPathComponent:@"data.txt"]; 
    NSLog(@"string to write:%@",printString); 
    [printString writeToFile:filePath atomically:YES 
        encoding:NSUTF8StringEncoding error:&error]; 

    ////ZIP FILE///// 

    NSString *zipfilePath = [documentsDirectory stringByAppendingPathComponent:@"data.zip"]; 
    [[NSFileManager defaultManager] removeItemAtPath: zipfilePath error: &error]; 

    ZipFile *zipFile = [[ZipFile alloc]initWithFileName:zipfilePath mode:ZipFileModeCreate]; 

    NSDictionary *attributes = [[NSFileManager defaultManager]attributesOfItemAtPath:zipfilePath error:&error]; 
    NSDate *Date = [attributes objectForKey:NSFileCreationDate]; 

    ZipWriteStream *stream = [zipFile writeFileInZipWithName:filePath fileDate:Date compressionLevel:ZipCompressionLevelBest]; 
    NSData *data = [NSData dataWithContentsOfFile:filePath]; 
    [stream writeData:data]; 
    [stream finishedWriting]; 


    [zipFile close]; 

ответ

0

Проблема заключается в том, что вы говорите:

writeFileInZipWithName:filePath 

Переменная filePath содержит огромное, что длинное имя вы жалуетесь. Это весь путь от вершины вплоть до вашего фактического файла.

имя вашего файла является @"data.txt", так что вы хотите сказать:

writeFileInZipWithName:@"data.txt" 
+1

подавшая жалобу прекратилось. Благодаря! – Mark

+1

Это сбивает с толку, потому что сначала вы не понимаете, что «имя» - это просто имя. Вы можете назначить произвольное имя файлу внутри zip. * Данные * поступают из ZipWriteStream, но * имя * зависит от вас. – matt