Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.05.2008, 21:59   #1
True
Новичок
Джуниор
 
Регистрация: 05.05.2008
Сообщений: 2
По умолчанию Вопрос по файлам.

Доброго времени суток уважаемые форумчане!
Собственно у меня возникла ситуация. Есть у меня на работе такая задача, каждый день в поределенный каталог скидывают файлы (допустим тхт), я должен эти файлы подбрасывать в одну программу, т.е. я захожу в директорию - ищу последние присланные файлы и копирую их. Поэтому есть мысль написать программу, которая бы искала файл по дате его создания, т.е. если файл кинули, например сегодня, то программа выберет именно его. Теперь сам вопрос, как с помощью Delphi осуществить поиск по последней дате создания файла в определенном каталоге для дальнейшего его копирования в нужную мне папку. Просьба отнестись с пониманием и помочь в данном вопросе. Заранее благодарю.
True вне форума Ответить с цитированием
Старый 05.05.2008, 22:17   #2
Air
Участник клуба
 
Аватар для Air
 
Регистрация: 30.04.2007
Сообщений: 1,307
По умолчанию

Вот наработка. на скорую руку.

Код:
var
  Form1: TForm1;
  str,dtr:TstringList;

implementation

{$R *.dfm}

function GetFileDateTime(FileName: string): TDateTime;
var
  intFileAge: LongInt;
begin
  intFileAge := FileAge(FileName);
  if intFileAge = -1 then
    Result := 0
  else
    Result := FileDateToDateTime(intFileAge)
end;

function ScanDiskToFile(Way,FileMask,SearchFile: string):TstringList;
var
SearchRec:TSearchRec;
hFindFile:integer;
sl:string;
begin
if Way[strlen(pchar(Way))] <> '\' then sl:='\';
hFindFile:=FindFirst(Way+sl+FileMask,faAnyFile,SearchRec);
while hFindFile=0 do
 begin
  if ((SearchRec.Attr and faDirectory)=0) then
   begin
    if SearchFile <> '*' then
     begin
      if SearchRec.Name=SearchFile then
       dtr.Add(way+sl+SearchFile);
     end
    else
     if '*'+ExtractFileExt(SearchRec.Name) = FileMask then
      dtr.Add(way+sl+SearchRec.Name);
    result:=dtr;
   end
  else
   if (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then
    begin
     str:=ScanDiskToFile(way+sl+SearchRec.Name,FileMask,SearchFile);
     try
      if str.Names[str.Count-1] <> '' then dtr.Add(way+sl+SearchFile);
     except
     end;
    end;
  hFindFile:=FindNext(SearchRec);
 end;
FindClose(SearchRec);
end;

procedure TForm1.FormCreate(Sender: TObject);
var i:integer; List:TStringList;
begin
List:=TStringList.Create;
List:=ScanDiskToFile('c:\','*.txt','*');
for i:=0 to List.Count-1 do
 if GetFileDateTime(List.Strings[i]) = now then //это слишком строго вплоть до секунды, проще перевести в строку и сравнивать со строкой datetostr(now) - вернёт 06.05.2008
  copyfile(pchar(List.Strings[i]), pchar('C:\Новое\'+extractfilename(List.Strings[i])),false);
end;
'c:\' - путь поиска
'*.txt' - фильтр
'*' - значит все, можно указать конкретный файл 'wse.txt' будет искать его


Инфа
http://www.google.ru/search?q=%D0%BF...utf-8&oe=utf-8
Всё гениальное - просто!

Последний раз редактировалось Air; 05.05.2008 в 22:51.
Air вне форума Ответить с цитированием
Старый 05.05.2008, 22:20   #3
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Для поиска используйте FindFirst, FindNext, FindClose. Для сравнения дат надо конечно же использовать нужную вам дату ( сегодня в данную секунду функция Now ) а для получения даты создания файла вот пример в MSDN:
Код:
#include <windows.h>

// GetLastWriteTime - Retrieves the last-write time and converts
//                    the time to a string
//
// Return value - TRUE if successful, FALSE otherwise
// hFile      - Valid file handle
// lpszString - Pointer to buffer to receive string

BOOL GetLastWriteTime(HANDLE hFile, LPTSTR lpszString)
{
    FILETIME ftCreate, ftAccess, ftWrite;
    SYSTEMTIME stUTC, stLocal;

    // Retrieve the file times for the file.
    if (!GetFileTime(hFile, &ftCreate, &ftAccess, &ftWrite))
        return FALSE;

    // Convert the last-write time to local time.
    FileTimeToSystemTime(&ftWrite, &stUTC);
    SystemTimeToTzSpecificLocalTime(NULL, &stUTC, &stLocal);

    // Build a string showing the date and time.
    wsprintf(lpszString, TEXT("%02d/%02d/%d  %02d:%02d"),
        stLocal.wMonth, stLocal.wDay, stLocal.wYear,
        stLocal.wHour, stLocal.wMinute);

    return TRUE;
}
BOBAH13 вне форума Ответить с цитированием
Старый 05.05.2008, 22:56   #4
True
Новичок
Джуниор
 
Регистрация: 05.05.2008
Сообщений: 2
По умолчанию

Всем большое спасибо за советы и помощь, буду пробовать что-то из этого всего сконструировать.

С первым вопросом более-менее разобрался, теперь ситуация такова, файлы архивные, как мне из архива (rar) извлечь нужный мне файл (тхт) допустим с помощью процедуры нажатия на кнопку?

Последний раз редактировалось Stilet; 06.05.2008 в 08:13.
True вне форума Ответить с цитированием
Старый 06.05.2008, 07:50   #5
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Про rar архив на этом форуме уже обсуждалось, ищем поиском.
BOBAH13 вне форума Ответить с цитированием
Старый 06.05.2008, 11:15   #6
Air
Участник клуба
 
Аватар для Air
 
Регистрация: 30.04.2007
Сообщений: 1,307
По умолчанию

У любого архиватора есть справка, посмотрите в ней как распаковывать командной строкой.
Далее

Код:
Uses Shellapi;
shellexecute(application.Handle,pchar('Open'),pchar(<путь к архиватору>),pchar(<параметр(CMD трока)>),'',1);
Всё гениальное - просто!
Air вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Учебник по bat файлам? Adamant Общие вопросы C/C++ 6 05.05.2014 19:40
доступ к файлам ryton Общие вопросы Delphi 13 23.05.2008 14:15
Вопрос по INI файлам kuzjma Общие вопросы C/C++ 3 11.02.2008 09:00
Подскажите пожалуйста по музыкальным файлам londoner Общие вопросы Delphi 2 23.02.2007 15:02