|
|
Регистрация | << Правила форума >> | 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 (я упустил в хелпе что такая полезная фенька есть у этой стандартной функции). |