ПО копирования и переноса дынных

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: ПО копирования и переноса дынных

Сообщение levchukvv » 25.05.2014 11:26:49

В общем процесс работы программы:
Пользователь создает задание в котором указывает следующие параметры:
- копировать или переносить
- директория откуда
- директория куда
- дата выполнения задания
- время выполнения задания

После чего, при нажатии на кнопку "создать задание", создается текстовый файл, имя которого - это дата и время выполнения задания, указанные пользователем, а в самом фале записаны остальные параметры построчно.

Код: Выделить всё
procedure TForm2.Button1Click(Sender: TObject);
begin
  with TStringList.Create do
     try
       if radiobutton1.Checked = true then Add('copy');
       if radiobutton2.Checked = true then Add('copy2');
       Add(directoryedit1.directory);
       Add(directoryedit2.directory);
      SaveToFile(Format('C:test%s.txt',
    [FormatDateTime('yyyy_MM_dd hh_nn',
    DateEdit1.Date + StrToTime(MaskEdit1.Text))]))
     finally
       Free;
     end;
     ShowMessage('задание успешно создано! :)');
     form2.Close;
end;     


После чего на главной форме пользователь, чтобы отобразить задания в Memo1 нажимает на кнопку "обновить задания" и в Memo1 загружаются имена файлов из каталога заданий:

Код: Выделить всё
procedure TForm1.Button2Click(Sender: TObject);
  var
searchResult : TSearchRec;
begin
if FindFirst('C:test*', faAnyFile, searchResult) = 0
  then
   begin
    repeat
     if FileExists('C:test' + searchResult.Name)
      then
       begin
        Memo1.Lines.add(searchResult.Name);
       end;
    until FindNext(searchResult) <> 0;
    FindClose(searchResult);
end;
end;   


Теперь мне надо научить программу отслеживать текущие дату и время и сравнивать с именами заданий в Memo1 и в случае совпадения запускать функцию копирования с параметрами, указанными в файле.

Вот функция копирования:

Код: Выделить всё
function CopyDirectory( StrFrom, StrTo : string) : Boolean;
var
  F : TShFileOpStruct;
begin
  F.wFunc:=FO_COPY;
  F.pFrom:=PChar(StrFrom + #0);
  F.pTo:=PChar(StrTo+#0);
  F.fFlags := FOF_ALLOWUNDO or FOF_NOCONFIRMATION;
  if ShFileOperation(F) = 0 then
    result:=False
  else
    result:=True;
end;     


Добавлено спустя 1 минуту 33 секунды:
Один хороший человек накидал мне вот это:
Код: Выделить всё
var
  s : string;
  t : TDateTime;
  fs : TFormatSettings;
  L : TStringList;
begin
  fs := DefaultFormatSettings;
  fs.DateSeparator := '_';
  fs.ShortDateFormat := 'yyyy_mm_dd';
  fs.TimeSeparator := '_';
  fs.LongTimeFormat := 'hh_nn';

  L := TStringList.Create;
  L.Delimiter := ' ';

  // А теперь в цикле получаешь имена файлов в папке ...
  s := '2014_05_23 20_10.txt'; // Получил это имя файла (создано оно было примером из 21-го поста)

  L.DelimitedText := ChangeFileExt(s, '');
  t := StrToDate(L[0], fs) + StrToTime(L[1], fs);

  if CompareDateTime(Now, t) > 0 then
    ShowMessage('Now > filename date') // Время еще не пришло
  else
    ShowMessage('Now <= filename date'); // Уже пришло или даже прошло...

  L.Free;
end;


Но я не понимаю как и где она смотрит на имена файлов

Добавлено спустя 8 часов 1 минуту 26 секунд:
Получил дату и время и вывел в label таким способом:

Код: Выделить всё
procedure TForm1.Timer2Timer(Sender: TObject);
Var
CurrDateTime: TDateTime;
CurrTime: TTime;
CurrDate: TDate;
fs: TFormatSettings;
searchResult : TSearchRec;
begin

  fs := DefaultFormatSettings;
  fs.DateSeparator := '_';
  fs.ShortDateFormat := 'yyyy_mm_dd';
  fs.TimeSeparator := '_';
  fs.LongTimeFormat := 'hh_nn';

CurrDateTime := Now;
CurrTime := Time;
CurrDate := Date;
label2.caption:=(('Текущие дата и время: ')+ DateTimeToStr(currdatetime, fs));
levchukvv
новенький
 
Сообщения: 11
Зарегистрирован: 15.05.2014 20:50:39

Re: ПО копирования и переноса дынных

Сообщение levchukvv » 30.05.2014 09:49:31

Сравниваю дату и время текущие в лейбле и указанные в задании, но ничего не происходит

Код: Выделить всё
if label1.caption = memo1.Lines[1] then
with TStringList.Create do
try
  LoadFromFile('C:\test\1.txt');
  CopyDirectory(Strings[2], Strings[3]);
finally
  Free;
  end;
levchukvv
новенький
 
Сообщения: 11
Зарегистрирован: 15.05.2014 20:50:39

Re: ПО копирования и переноса дынных

Сообщение vkhacker » 01.07.2014 18:42:13

Делал я такую программу. У меня в ней были условия: в какие месяцы выполнять, в какие дни и в какие минуты (у меня было кратно 5 минутам). Для планировщика, выполняющего задание был примерно следующий алгоритм:
1) получаем текущее время и сохраняем в переменной (-ых);
2) берем задание;
3) проверяем выполняется ли это задание в текущей месяц, если да переходим к шагу 4, если нет, переходим к шагу 8;
4) проверяем выполняется ли это задание в текущей день, если да переходим к шагу 5, если нет, переходим к шагу 8;
5) проверяем выполняется ли это задание в текущий час, если да переходим к шагу 6, если нет, переходим к шагу 8;
6) проверяем выполняется ли это задание в текущую минуту, если да переходим к шагу 7, если нет, переходим к шагу 8;
7) выполняем задание;
8) переходим к следующему заданию и к шагу 2.

Разумеется в этом алгоритме не всё учтено, но может поможет.
vkhacker
незнакомец
 
Сообщения: 9
Зарегистрирован: 06.02.2014 09:50:35

Пред.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 243

Рейтинг@Mail.ru
cron