Конференция "Прочее" » Компонент для тестирования zip-архивов [D6, Win2k]
 
  • KSergey © (06.11.08 12:54) [20]
    Что-то такое (накидал сейчас шаблон):

    @echo off

    rem --- Перемещаем хранящиеся копии "вниз" ---

    rd /S /Q d:\backup\5
    ren d:\backup\4 5
    ren d:\backup\3 4
    ren d:\backup\2 3
    ren d:\backup\1 2
    ren d:\backup\0 1

    rem --- Папка для текущей копии и дат начала копирования ---

    mkdir d:\backup\0

    @echo Start: > d:\backup\0\_BackUp_date.txt
    date /T >> d:\backup\0\_BackUp_date.txt
    time /T >> d:\backup\0\_BackUp_date.txt

    rem --- Копирование и дата окончания ---

    xcopy /E /H /Y c:\DataBase\*.* d:\backup\0

    @echo End: >> d:\backup\0\_BackUp_date.txt
    date /T >> d:\backup\0\_BackUp_date.txt
    time /T >> d:\backup\0\_BackUp_date.txt



    Понятно, что при особом желании можно, наверное, и циклик придумаь на переменных bat-файла, вместо нескольких ren (т.е. будет одна внутри цикла), но это уже мелочи.
    Так же, понятно, при желании легко добавить архивирование, а не просто копирование, но мне это не критично, места много.
  • brother © (06.11.08 13:05) [21]
    идея понятна возьму на вооружение...
  • KSergey © (06.11.08 13:10) [22]
    Можно так же пользовать ключик rar.exe

    ag[формат]    Добавить к имени архива текущие дату и время



    только не очень понятно как потом удалять самые страные. Но и тут явно можно извратиться и придумать способ.
  • Валигози © (06.11.08 13:39) [23]

    > KSergey ©   (06.11.08 12:33) [18]
    > > Валигози ©   (06.11.08 12:13) [14]
    > > А как получить список файлов в архиве? Использовать компоненту
    >
    > > для получения списка файлов а для тестирования утилиту
    > запускать?
    > >  Да и таскать за собой утилиты... Както кривизной попахивает.
    >
    > А типа не судьба попробовать приведенную мною однострочную
    > команду и убедиться, что она тестирует ВСЕ файлы в расширением
    > zip в текущей директории и ВСЕ файлы внутри архива? Ну да,
    >  чукча писатель: нашлепать никчемную прогу (в смысле тут
    > ен нужную) - это проще, чем почитать хелпы.

    Абсолютно не вижу причин для споров и тем более для оскорблений. Что мне нужно было - написано вполне подробно в самом вопросе:

    > Подскажите пожалуйста, есть ли (и где если есть) такая
    > компонента которая тестировала бы файлы прямо на лету?
    > (Желательно чтобы она не таскала за собой dll и была с исходными
    > кодами)


    Непонимаю как можно умудриться понять этот вопрос неправильно?
    Я вижу всего два варианта ответа: либо просто ссылку на такой компонент либо "в ответ тишина", которая означала бы, что о таком компоненте никто не слышал. Но зачем засорять форум спамом? :( Здесь вроде деньги не дают за количество ответов...
    Единственный который действительно попытался ответить на мой вопрос - это Slym - даже не поленился скачать компонент "KAZip v.2.0" и порыться в его исходниках :) (что на этом форуме бывает не часто) за что ему Спасибо.
  • Skyle © (06.11.08 14:01) [24]

    > KSergey ©   (06.11.08 13:10) [22]
    > Можно так же пользовать ключик rar.exe
    >
    > ag[формат]    Добавить к имени архива текущие дату и время
    >
    > только не очень понятно как потом удалять самые страные.
    >  Но и тут явно можно извратиться и придумать способ.

    VBS и дата создания файла?
  • KSergey © (06.11.08 15:21) [25]
    > Skyle ©   (06.11.08 14:01) [24]
    > VBS и дата создания файла?

    да можно наверное и такой путь: dir с выдачей только имен файлов, отсортированных по дате, старые первыми, потом придумать как задействовать в for только первую строку из этого списка.
    Мне не удалось придумать, если честно.

    Ну а так - да, VBS - это и вовсе наше все, тут что хошь навертеть можно :)
  • KSergey © (06.11.08 15:25) [26]
    > Валигози ©   (06.11.08 13:39) [23]
    > Абсолютно не вижу причин для споров и тем более для оскорблений.
    >  Что мне нужно было - написано вполне подробно в самом вопросе:

    Очевидно, что компонента эта - не само цель. Цель - сделать удобную систему архивирования.
    Потому и показано, что сделоть это можно сильно иначе, при этом проблем с компонентой не возникает. Да и вообще с программированием на дельфи, что вполне возможно - правильно.
  • Валигози © (06.11.08 15:45) [27]

    > KSergey ©   (06.11.08 15:25) [26]
    > > Валигози ©   (06.11.08 13:39) [23]
    > > Абсолютно не вижу причин для споров и тем более для оскорблений.
    >
    > >  Что мне нужно было - написано вполне подробно в самом
    > вопросе:
    >
    > Очевидно, что компонента эта - не само цель. Цель - сделать
    > удобную систему архивирования.

    Это не моя цель - этим пусть занимаются администраторы. Свою цель как программиста я описал выше.


    > Потому и показано, что сделоть это можно сильно иначе, при
    > этом проблем с компонентой не возникает. Да и вообще с программированием
    > на дельфи, что вполне возможно - правильно.

    Во-первых это форум по Delphi, а не по архивации. И вопросы обсуждаются по Delphi. И я не с рамблера свалился в этот форум. А то что мой вопрос модераторы перебросили в подфорум "Поболтать" - это на их совести. Ну раз перебросили значит я могу и пофилософствовать :)
    Во-вторых я не совсем представляю как без Delphi (точнее используя только rar.exe) я могу выполнить звою задачу (т.е. свою цель):
    1. Открыть файл-шаблон эксэля
    2. Пройтись по строкам, разобрать команды и выполнить их (команды - проверить архив, прочитать количество свободного места на дисках серверов и т.д.)
    3. Заполнить ячейки эксэля по результатам проверки и сохранить его под именем текущей даты
    4. Отправить этот эксэль-файл начальнику по e-mail
  • KSergey © (06.11.08 16:06) [28]
    без дельфи это, пожалуй, можно сделать на VBS.
    А если не ставить непременное условие "файл-шаблон эксэля", а ограничиться текстовиком - то и вовсе батничком.
  • KSergey © (06.11.08 16:07) [29]
    Хотя, конечно, для начальника расстараться надо, начальники они ж красивые картинки жуть как любят, больше сути. Тут да, понимаю, увы :)
  • Anatoly Podgoretsky © (06.11.08 16:20) [30]
    > Валигози  (06.11.2008 15:45:27)  [27]

    > А то что мой вопрос модераторы перебросили в подфорум "Поболтать" - это на их совести. Ну раз перебросили значит я могу и пофилософствовать :)

    Ты просто еще не знаешь, что могут модераторы.
  • Валигози © (06.11.08 17:12) [31]

    > KSergey ©   (06.11.08 16:06) [28]
    > без дельфи это, пожалуй, можно сделать на VBS.

    Боюсь, что я не в курсе что такое VBS... Да собственно мне незачем учить другие языки, пока я знаю Delphi... :)


    > А если не ставить непременное условие "файл-шаблон эксэля",
    >  а ограничиться текстовиком - то и вовсе батничком.

    Это не совсем моё условие... Так хочет начальник...


    > KSergey ©   (06.11.08 16:07) [29]
    > Хотя, конечно, для начальника расстараться надо, начальники
    > они ж красивые картинки жуть как любят, больше сути. Тут
    > да, понимаю, увы :)

    Ага. Вместо того чтобы каждое утро битый час практически вручную заполнять файл эксэля, думаю, напишука лучше утилитку, которая сама будет всё делать, а я лучше в это время в интернете что нибудь почитаю... :)


    > Anatoly Podgoretsky ©   (06.11.08 16:20) [30]
    > > Валигози  (06.11.2008 15:45:27)  [27]
    >
    > > А то что мой вопрос модераторы перебросили в подфорум
    > "Поболтать" - это на их совести. Ну раз перебросили значит
    > я могу и пофилософствовать :)
    >
    > Ты просто еще не знаешь, что могут модераторы.

    Да, давненько я не заходил на этот форум... А раньше, помню, даже отвечал на вопросы...

    Кстати, я нашёл ещё одну компоненту которая может извлекать из zip-архива в поток (в TStream): http://tpabbrevia.sourceforge.net

    В ней, к сожалению, нет (или я не нашёл) фунции тестирования, но можно тестирование выполнить по-другому.
    Для её тестирования написал небольшой класс:

    type
     TNullStream = class(TStream)
     protected
       procedure SetSize(NewSize: Longint); override;
       procedure SetSize(const NewSize: Int64); override;
     public
       FSL: TStringList;
       constructor Create();
       function Read(var Buffer; Count: Longint): Longint; override;
       function Write(const Buffer; Count: Longint): Longint; override;
       function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override;
     end;

    { TNullStream }

    constructor TNullStream.Create;
    begin
     FSL:=TStringList.Create;
    end;

    function TNullStream.Read(var Buffer; Count: Integer): Longint;
    begin
     FSL.Add('Read::'+IntToStr(Count));
    end;

    function TNullStream.Seek(const Offset: Int64; Origin: TSeekOrigin): Int64;
    const
     cc: array[TSeekOrigin]of String = ('soBeginning', 'soCurrent', 'soEnd');
    begin
     FSL.Add('Seek::'+IntToStr(Offset)+'::'+cc[Origin]);
    end;

    procedure TNullStream.SetSize(NewSize: Integer);
    begin
     inherited;
     FSL.Add('SetSize::'+IntToStr(NewSize));
    end;

    procedure TNullStream.SetSize(const NewSize: Int64);
    begin
     inherited;
     FSL.Add('SetSize::'+IntToStr(NewSize));
    end;

    function TNullStream.Write(const Buffer; Count: Integer): Longint;
    begin
     FSL.Add('Write::'+IntToStr(Count));
     Result:=Count;
    end;



    И когда выполняю этот код:

    procedure TForm1.Button1Click(Sender: TObject);
    var
     ss: TNullStream;
    begin
     ss:=TNullStream.Create;
     AbZipKit1.OpenArchive('C:\08-11-06.zip');
     Edit1.Text:=AbZipKit1.Items[1].FileName;
     AbZipKit1.ExtractToStream('1Cv77.dat', ss);

     AbZipKit1.CloseArchive;
     Memo1.Lines.Assign(ss.FSL);
     ss.Free;
    end;



    Возвращает мне в Memo1:
    Seek::0::soCurrent
    Write::32768
    Write::32768
    ....................
    Write::32768
    Write::32768
    Write::58949
    Seek::0::soCurrent

    Осталось только этот класс переделать, чтобы он вычислял CRC32 и после чего сравнивать с тем который в архиве прописан и порядок :) Этим я уже дома займусь - пора идти домой...
  • сюжетнаялиния (06.11.08 17:21) [32]
    >Валигози ©   (06.11.08 17:12) [31]
    >Для её тестирования написал небольшой класс:

    Кто мешал включить голову и сделать все это до того, как создавать тему?
  • Валигози © (06.11.08 17:45) [33]

    > сюжетнаялиния   (06.11.08 17:21) [32]
    > >Валигози ©   (06.11.08 17:12) [31]
    > >Для её тестирования написал небольшой класс:
    >
    > Кто мешал включить голову и сделать все это до того, как
    > создавать тему?

    До этого мешало то, что я эту компоненту не нашёл. Там же ясно написано? Я разве не русским языком написал? Включай глаза и смотри. Цитирую:

    > Кстати, я нашёл ещё одну компоненту которая может извлекать
    > из zip-архива в поток (в TStream): http://tpabbrevia.sourceforge.
    > net

  • сюжетнаялиния (06.11.08 18:30) [34]
    О, да... я не заметил! Извини меня пожалуйста, Валигози! Ты прав! Прав!
  • KSergey © (06.11.08 18:32) [35]
    я не смог скачать инструкцию по компоненте, но у меня есть сильное пдозрение, что она сама умеет проверять CRC и возвращать признак "удачно распаковалось" или "неудачно".
    Ну во всяком случае я бы сделал так.
  • Валигози © (07.11.08 12:08) [36]

    > KSergey ©   (06.11.08 18:32) [35]
    > я не смог скачать инструкцию по компоненте, но у меня есть
    > сильное пдозрение, что она сама умеет проверять CRC и возвращать
    > признак "удачно распаковалось" или "неудачно".
    > Ну во всяком случае я бы сделал так.

    Совершенно верно! Именно так всё и оказалось на самом деле :)
    Если после извлечения файла контрольная сумма не совпадает - вызывается событие OnProcessItemFailure :)
 
Конференция "Прочее" » Компонент для тестирования zip-архивов [D6, Win2k]
Есть новые Нет новых   [134446   +31][b:0][p:0.002]