Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
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); |
|
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|