Пользователь создает задание в котором указывает следующие параметры:
- копировать или переносить
- директория откуда
- директория куда
- дата выполнения задания
- время выполнения задания
После чего, при нажатии на кнопку "создать задание", создается текстовый файл, имя которого - это дата и время выполнения задания, указанные пользователем, а в самом фале записаны остальные параметры построчно.
- Код: Выделить всё
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));