Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Archive:Zip; может кто уже делал или знает 
V
    Опции темы
tamah
Дата 17.11.2005, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 17.11.2005
Где: Mogilev

Репутация: нет
Всего: нет



Привет всем!
Я уже постил начало своего вопроса,
только из-за отсутствия на момент поста регистрации
не удалось его редактировать (приношу извенения модератарам за такой спам - честное слово - не специально).

У меня такая проблема:

необходимо получить в памяти архив из пяти файлов.

Два файла лжат в директории.

Входные файлы:
/дир
/дир/файл_1
/дир/файл_2
/файл_3
/файл_4

При этом файл_4 нужно редактировать, загрузив его в память (нельзя трогать оригинал).

smile
Спасибо.
PM MAIL MSN   Вверх
korob2001
Дата 17.11.2005, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 13
Всего: 61



Цитата

Я уже постил начало своего вопроса,
только из-за отсутствия на момент поста регистрации
не удалось его редактировать (приношу извенения модератарам за такой спам - честное слово - не специально).

Я его уже удалил. ОДИН топик - ОДИН вопрос. Это правила форума, не я их придумал, но считаю их абсолютно справедливыми, так как найти нужную информацию так намного легче.

Теперь к делу.
Я что-то вопроса не понял. Проблема с архивированием или с обработкой текстового файла?
Цитата

С одним из них необходимо произвести некоторые изменения,

Какие, например?
Цитата
Два файла находятся в директории

Помимо этих файлов и вложенного каталога ещё что-нить есть в корневом каталоге? Если да, то нужно ли архивировать всё остальное?


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
tamah
Дата 18.11.2005, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 17.11.2005
Где: Mogilev

Репутация: нет
Всего: нет



korob2001
спасибо, что вызвался помочь, я уже решил данный вопрос.

А нужно было редактировать файл в памяти, затем сжать и переслать.
PM MAIL MSN   Вверх
korob2001
Дата 18.11.2005, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 13
Всего: 61



А решением не поделишься? Я просто тоже тут решил, насколько понял условие.

Вобщем данная программа при запуске архивирует всё, что находится в текущем катологе, кроме себя, уровень вложенности каталогов не важен. Если кому понадобится то вот её код:
Код

#!/usr/bin/perl -w
use strict;
use Archive::Zip qw( :ERROR_CODES :CONSTANTS );
use subs qw( recursiv );

my $zip = Archive::Zip->new();
my $mem;
my @dirs = ('./');
my $name = ( split(/\/|\\/, $0) )[-1];

recursiv(shift @dirs);
die 'write error' unless $zip->writeToFileNamed('thisdir.zip') == AZ_OK;

sub recursiv {
    my $dir = shift || return;
    local *DIR;
    opendir( DIR, "$dir" ) or die "Can't open catalog $dir: $!\n";
        while ( my $file = readdir DIR ) {
                next if $file =~ /^\.\.?$/;
                next if $file =~ /$name$/io;
                $dir =~ s/^\.//;
                $dir =~ s/^\/|\\//;
                if ( -d "$dir$file" ) {
                      $mem = $zip->addDirectory("$dir$file/");
                      $mem->desiredCompressionMethod( COMPRESSION_DEFLATED );
                      push( @dirs, "$dir$file/" );
                } else {
                      $mem = $zip->addFile("$dir$file","$dir$file");
                }

        }
    closedir(DIR);
    recursiv( shift @dirs );
}


Это сообщение отредактировал(а) korob2001 - 18.11.2005, 19:54


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
tamah
Дата 19.11.2005, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 17.11.2005
Где: Mogilev

Репутация: нет
Всего: нет



korob2001
Передо мной стояла более узконаправленная задача,
вот её листинг:

Код

#!/usr/bin/perl

use Archive::Zip;
use Archive::Zip::BufferedFileHandle;
use IO::File;

use lib qw(../../include ../include);


sub add_to_archive 
{
    my $zip      = shift;
    my $dir_root = shift;
        my @files    = @_;
        
        foreach my $file (@files) {
    
        if (-d $dir_root.$file ) {
            warn "Can't add tree $file\n"
                if $zip->addTree( $dir_root.$file, $file ) != AZ_OK;
        } else {
            $zip->addFile( $dir_root.$file, $file )
                or warn "Can't add file $file\n";
        }
    }    
}

my $affiliate_id  = param("affiliate_id");
my $download_type = param("download_type");

my $zipName     = '';
my $dir_root    = '';
my $dir_form    = '';
my $dir_tmpl    = '';

if ($download_type eq 'vertical_form') {
    $dir_root .= '../../affiliatetmpl/itinerary_forms';
    $dir_form .= '/ExternalFormVertical';
    $dir_tmpl .= '/ExternalFormVertical_tmpl';
    $zipName  .= 'ExternalFormVertical.zip';
} else {
    $dir_root .= '/........./affiliatetmpl/itinerary_forms';
    $dir_form .= '/ExternalFormHorizontal';
    $dir_tmpl .= '/ExternalFormHorizontal_tmpl';
    $zipName  .= 'ExternalFormHorizontal.zip';
}
                                                                                                             
my $html_body       = '/a.form.body';
my $install_guid    = '/InstallGuide.txt';
my $tailoring_guide = '/TailoringGuide.txt';

my @form_files      = ($dir_form);
my @common_files    = ($install_guid, $tailoring_guide);
my @tamplates_files = ($html_body);


my $zip = Archive::Zip->new();

add_to_archive($zip, $dir_root, @form_files);
add_to_archive($zip, $dir_root, @common_files);


my $fh = Archive::Zip::BufferedFileHandle->new();
$fh->readFromFile($dir_root.$dir_tmpl.$html_body);

my $body = $fh->contents;
$body =~ s/!REF_ID!/$affiliate_id/g;
$fh->contents($body);

$zip->addString($fh->contents, $dir_form.$html_body);


my $output_file = Archive::Zip::BufferedFileHandle->new();
$zip->writeToFileHandle($output_file, 0);

print "Content-Type: application/zip\r\n";
print "Content-disposition: attachment; filename=$zipName\r\n";

print "Content-Length: " . length($output_file->contents) . "\r\n";
print "\r\n";
print $output_file->contents;



Это сообщение отредактировал(а) tamah - 20.11.2005, 16:22
PM MAIL MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.0487 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.