![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Такая задачка:
Найти все текстовые файлы в папке и занести их имена построчно в StringList, а так же попутно найти самый свежий(по дате создания) файл в этой папке и залить его название в ключ реестра У меня вышло нечто вроде такого: Код:
...
function GetFreshFile(FileNames: TStringList): String; {Из этой функции надо сотворить такую, чтобы брала построчно из TStringList имена файлов, сравнивала какой файл самый свежий по дате создания и выдавала его имя как результат}
try
for i=0 to FileNames.Count-1 do begin
FileAge(FileNames.Strings[i]) //Получаем дату создания каждого файла
... //Как дальше сравнивать даты и выделить из них самую свежую?
finally
FileNames.Free //Уничтожаем TStringList
end;
end;
procedure TForm.ButtonClick(Sender: TObject);
var
Files : TStringList;
reg : TRegistry;
begin
Files := TStringList.Create;
try
If FindFirst('C:\Proga\*.txt', faAnyFile, SearchRec)=0 then //Ищем текстовые файлы в папке "C:\Proga"
repeat
Files.Add(SearchRec.Name); //Добавляем в StringList имя каждого найденного файла как новую строку
until FindNext(SearchRec) <> 0;
end;
reg := TRegistry.Create;
reg.RootKey := HKEY_LOCAL_MACHINE;
reg.OpenKey('Software\Proga',true);
reg.WriteString('LastF', GetFreshFile(Files)); //Сливаем имя последнего файла в ключ реестра HKEY_LOCAL_MACHINE\Software\Proga.LastF
finally
reg.Free; //Уничтожаем TRegistry
end;
FindClose(SearchRec); //Уничтожаем поиск
end; |
|
#2
|
||||
|
||||
|
И чего-же вы от нас ждете?
|
|
#3
|
|||
|
|||
|
"Hatchet" Harry, попробуйте функцию CompareDateTime из стандартного модуля DateUtils.
Код:
function GetFreshFile(const FileNames: TStringList): String;
var
i, FNamesCnt: Integer;
CurrFDate, LatestFDate: TDateTime;
begin
FNamesCnt := FileNames.Count - 1;
Result := FileNames[0];
LatestFDate := FileDateToDateTime(FileAge(Result));
for i := 1 to FNamesCnt do
begin
CurrFDate := FileDateToDateTime(FileAge(FileNames.Strings[i]));
if CompareDateTime(CurrFDate, LatestFDate) = GreaterThanValue then
begin
Result := FileNames.Strings[i];
LatestFDate := CurrFDate;
end;
end;
end;
end; |
|
#4
|
|||
|
|||
|
Цитата:
Компилятор почему-то не переваривает строку Код:
if CompareDateTime(CurrFDate, LatestFDate) = GreaterThanValue then [Warning] MainModule.pas(155): Comparing signed and unsigned types - widened both operands (модуль DateUtils в Uses я подключил) |
|
#5
|
||||
|
||||
|
Цитата:
Нафига вообще этот цирк с функциями? У вас в коде есть место где все это можно делать сразу: Код:
repeat
Files.Add(SearchRec.Name);
until FindNext(SearchRec) <> 0; |
|
#6
|
|||
|
|||
|
"Hatchet" Harry, по поводу
Цитата:
А лучше последуйте совету, который дал Страдалецъ. Я что-то совсем забыла про структуру SearchRec. =) А именно, SearchRec.Time содержит то же самое, что вы получаете с помощью FileAge. Ну а дальше можно действовать той же самой функцией FileDateToDateTime, как я писала раньше. Цитата:
|
|
#7
|
|||
|
|||
|
Nyctos Kasignete, благодарю за помощь, подключил Types и еще поправил в своём коде пару грубых ошибок(в Result и CurrDateF сувал имя файла а не полный путь к нему) и всё работает как часики!
Страдалецъ и вам спасибо за полезную инфу касательно SearchRec.Time (я упустил в хелпе что такая полезная фенька есть у этой стандартной функции). |