CftClub.ru
Клуб специалистов ЦФТ-Банк

Как заархивировать папку

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle
Предыдущая тема :: Следующая тема  
Автор Сообщение
realman
Участник


Вступление в Клуб: 15.03.2018
СообщениеСр Май 23, 2018 15:41   Как заархивировать папку Ответить с цитатой
Полезность: Нет оценки
Есть файлы в папке в FTP директории, нужно проверить по условию
если дата изменения файла больше 3-х дней то брать эти файлы и переместить их на новую папку и затем новую папку заархивировать. Как можно сделать? Буду благодарен

Пытаюсь так(архив создается но кривой, не открывается):
Код:
vc_FtpDir        varchar2;            -- папка выгрузки отчета
ablob             Blob;
a_compressed_blob Blob;
vc_CurDir        varchar2;
vn_DirId         binary_integer;
vn_ExResult         binary_integer;
vc_FName         varchar2(512);
vc_FAttrs         varchar2(512);
vc_FUowner         varchar2(512);
vc_FGowner         varchar2(512);
vc_FMdate         varchar2(512);
vn_Fsize         binary_integer;
lid      integer;
new_file integer;
begin
vc_FtpDir      := '[/home/pc/test/import/archive]';
for i_path in 1 .. Indx(vc_FtpDir)
   loop
      -- получим путь к каталогу для очистки
      vc_CurDir := ::[RUNTIME].[REC].GETPAR(vc_FtpDir, i_path);
      -- получим дескриптор каталога
      vn_DirId    := stdio.opendir(vc_CurDir);
      -- сбрасываем указатель чтения на начало
      vn_ExResult := stdio.resetdir(vn_DirId);
      loop
         vn_ExResult := stdio.readdir(
            dir   == vn_DirId,
            name   == vc_FName,
            attrs   == vc_FAttrs,
            uowner   == vc_FUowner,
            gowner   == vc_FGOwner,
            mdate   == vc_FMDate,
            fsize   == vn_FSize
            );
          -- выберем файлы, давностью 3 дня
          if sysdate - to_date(vc_FMdate, 'yyyy-mm-dd hh24:mi:ss') < 3 then
             -- begin pl/sql
                LID := Z$LOG_CORE.OPEN('import/archive');
             new_file := STDIO.MKDIR('import/archive/Аrchive_'||to_char(sysdate, 'yyyymmdd_hh24:mi'), 0);
                Z$LOG_CORE.CLOSE(LID);     
                -- end pl/sql    
                stdio.MOVE_FILE( vc_CurDir || '/' || vc_FName, '/home/pc/test/import/archive/Аrchive_'||to_char(sysdate, 'yyyymmdd_hh24:mi') || '/' || vc_FName );
                ablob := ::[RUNTIME].[DT].FILE2BLOB(vc_CurDir, 'Аrchive_'||to_char(sysdate, 'yyyymmdd_hh24:mi'));
                -- begin pl/sql
                a_compressed_blob := utl_compress.lz_compress(ablob, 9);
                -- end pl/sql
                ::[RUNTIME].[DT].BLOB2FILE(a_compressed_blob,vc_CurDir, 'Аrchive_'||to_char(sysdate, 'yyyymmdd_hh24:mi')||'.zip');   
          end if;
           exit when vn_ExResult <= 0;
      end loop;
   end loop;
end;


Последний раз редактировалось: realman (Чт Май 24, 2018 10:43), всего редактировалось 3 раз(а)
Эмиралька
Эксперт


Вступление в Клуб: 09.11.2015
СообщениеЧт Май 24, 2018 06:32   Re: Как заархивировать папку в FTP Ответить с цитатой
Полезность: Нет оценки
realman пишет:
Есть файлы в папке в FTP директории...заархивировать. Как можно сделать? Буду благодарен

Пытаюсь так:
Код:
...


А при чём тут File Transport Protocol ?!
И в чём вопрос, собственно?
realman
Участник


Вступление в Клуб: 15.03.2018
СообщениеЧт Май 24, 2018 09:45    Ответить с цитатой
Полезность: Нет оценки
Вопрос в том как заархивировать папку
, не обязательно в ftp
Ezhik
Участник со стажем


Вступление в Клуб: 17.04.2009
СообщениеЧт Май 24, 2018 10:34    Ответить с цитатой
Полезность: 1
Посмотрите в сторону пакета [ZIP]
Можно попытаться собрать все в блоб, а потом заархивировать этим пакетом (получить на выходе блоб архива, который и записывать в файл).
realman
Участник


Вступление в Клуб: 15.03.2018
СообщениеЧт Май 24, 2018 10:44    Ответить с цитатой
Полезность: Нет оценки
Ezhik пишет:
Посмотрите в сторону пакета [ZIP]
Можно попытаться собрать все в блоб, а потом заархивировать этим пакетом (получить на выходе блоб архива, который и записывать в файл).


Обновил вопрос, приведите плиз пример
Ezhik
Участник со стажем


Вступление в Клуб: 17.04.2009
СообщениеЧт Май 24, 2018 10:59    Ответить с цитатой
Полезность: 2
::[ASV_REESTR_FILES].[EXPORT]

Код:
      --создадим архив   
      begin
         ::[RUNTIME].[ZIP].add_file(v_blob_zip,rFile_name,v_blob);
      exception
         when others then log_err('Ошибка при добавлении файла в архив:'||rFile_name,false);
      end;
      ::[RUNTIME].[ZIP].finish_zip(v_blob_zip);
      --сохраним архив
      blob2file(v_blob_zip,vPath,rFile_name_ar);
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru