Работа с датой создания файла

Общие вопросы программирования, алгоритмы и т.п.

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

Работа с датой создания файла

Сообщение ViruZ » 21.05.2008 17:06:24

Есть следующая задача: в папке записаны фотографии, необходимо в цикле пройтись по всем файлам и скопировать их в папки по дате создания. Знаю, что задача достаточно простая, но сегодня мозги не соображают как реализовать. Вырисовывается следующий алгоритм: проверить дату создания файла, если папки с таким именем не существует, создать, копировать файл в папку.Как определить дату создания файла?
ViruZ
постоялец
 
Сообщения: 175
Зарегистрирован: 30.05.2005 17:41:12
Откуда: Украина

Re: Работа с датой создания файла

Сообщение FedeX » 21.05.2008 18:52:41

Win
BOOL GetFileTime(

HANDLE hFile, // identifies the file
LPFILETIME lpCreationTime, // address of creation time
LPFILETIME lpLastAccessTime, // address of last access time
LPFILETIME lpLastWriteTime // address of last write time
);

или кросс Function FileGetDate (Handle : THandle) : Longint;
правда это вернёт дату последней записи в файл, а не дату создания.

или можно:
BOOL GetFileAttributesEx(
LPCTSTR lpFileName, // pointer to string that specifies a file or directory
GET_FILEEX_INFO_LEVELS fInfoLevelId, // value that specifies the type of attribute information to obtain
LPVOID lpFileInformation // pointer to buffer to receive attribute information
);
тогда можно не открывать файл
Аватара пользователя
FedeX
постоялец
 
Сообщения: 422
Зарегистрирован: 27.03.2006 09:25:34
Откуда: украина, житомир

Re: Работа с датой создания файла

Сообщение Vadim » 22.05.2008 11:41:32

Код: Выделить всё
var
  sr: TSearchRec;
Begin
    If FindFirst('Ваш_каталог\*.*', faAnyFile, sr) = 0 then
    Repeat
        If not DirectoryExists(DateToStr(FileTimeToDateTime(sr.Time))) then
        Begin
           //Создаём каталог и копируем туды файл
        End;
    Until FindNext(sr) <> 0;
    FindClose(sr);
End;

Что-то примерно такое... :)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Работа с датой создания файла

Сообщение ViTality » 22.05.2008 13:23:02

помоему тебе всеже нужна не дата создания файла а дата изменения. потомучто в дете создания хранится время когда ты скинул эти файлы себе на копм, а не когра была зделана фотография.
ViTality
постоялец
 
Сообщения: 308
Зарегистрирован: 05.10.2007 15:12:02

Re: Работа с датой создания файла

Сообщение MaxK » 17.08.2009 16:25:01

Я тоже занимался точно-такой же задачей. вот мой код. Может пригодится.

Код: Выделить всё
if FindFirst(DirIn + '*.JPG', faAnyFile-faDirectory, SearchRec) = 0 then
        repeat
          AhowMessage( 'Обработка файла: ' + DirIn + SearchRec.Name);
          try
            FolderName:=DateToStr(FileDateToDateTime(SearchRec.Time))+'\';     // Получаем дату создания / изменения файла
            if not DirectoryExists(DirOut+FolderName) then                                  // Проверяем на существование файла
              CreateDir(DirOut+FolderName);                                                        // Создаем папку
            FileCopy(DirIn + SearchRec.Name, DirOut+FolderName + SearchRec.Name);    // Копируем файл   
          except
           ShowMessage(DirIn + SearchRec.Name+'... Ошибка');                 
          end;
        until FindNext(SearchRec) <> 0;
      FindClose(SearchRec);

      btNext.Enabled := True;
     ShowMessage('Обработка файлов: Все файлы обработанны.');


Может пригодиться функция копирования файла
Код: Выделить всё
procedure FileCopy(const SourceFileName, TargetFileName: string);
var
  S, T: TFileStream;

begin
  if SourceFileName <> TargetFileName then
  begin
  S := TFileStream.Create(sourcefilename, fmOpenRead);
  try
    T := TFileStream.Create(targetfilename, fmOpenWrite or fmCreate);
    try
      T.CopyFrom(S, S.Size);
      FileSetDate(T.Handle, FileGetDate(S.Handle));
    finally
      T.Free;
    end;
  finally
    S.Free;
  end;
  end;
end;
MaxK
незнакомец
 
Сообщения: 2
Зарегистрирован: 06.08.2009 09:58:33


Вернуться в Общее

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

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

Рейтинг@Mail.ru