Delphi - 从给定路径获取上次创建的文件夹名称

时间:2016-01-05 14:08:48

标签: delphi

是否有从给定路径获取最后创建的文件夹的功能? 我想查看最后创建的文件夹,以检查我的相机今天是否拍摄了照片。 我想的另一种方法是获取系统日期,然后开始搜索包含当前日期的文件夹。但是如果相机日期错误,那么这种方法不会起作用! 谢谢。还有其他想法吗?

前:

if lastcreatedfolder(dir_path):='05012016' then 
showmessage('TODAY A FOLDER WAS CREATED') 
else 
showmessage('NO FOLDER WAS CREATED TODAY!');

3 个答案:

答案 0 :(得分:2)

Delphi 2010也有IOUtils.pas单位。

使用此单元,可以按如下方式找到最后创建的文件夹:

uses
  IOUtils, Types, DateUtils;

function FindLastCreatedDirectory(const APath: string): string;
var
  LastCreateTime : TDateTime;
  PathsInQuestion: TStringDynArray;
  n : Integer;
begin
  LastCreateTime := MinDateTime;
  Result := '';

  PathsInQuestion := TDirectory.GetDirectories(APath);
  for n := Low(PathsInQuestion) to High(PathsInQuestion) do
  begin
    if CompareDateTime( TDirectory.GetCreationTime(PathsInQuestion[n]), LastCreateTime ) = GreaterThanValue then
    begin
      LastCreateTime := TDirectory.GetCreationTime(PathsInQuestion[n]);
      Result := PathsInQuestion[n];
    end;
  end;
end;

答案 1 :(得分:1)

可以使用System.SysUtils.FindFirst函数找到给定路径中最后创建的目录。

可以使用函数的TimeStamp参数检查TSearchRec记录的var F字段,以评估文件系统元素的时间戳。

uses
  System.SysUtils,
  Winapi.Windows;

function getLastCreatedDirectory(const APath: string): string;
var
  res: TSearchRec;
  lastCreatedFileTime: TFileTime;
begin
  Result := '';
  FillChar(lastCreatedFileTime, SizeOf(TFileTime), 0);

  if FindFirst(APath, faDirectory, res) = 0 then begin
    try
      repeat
        if (res.Attr and faDirectory) = 0 then
          Continue;

        if (res.Name = '.') or (res.Name = '..') then
          Continue;

        {if res.TimeStamp > lastCreatedTime then begin
          lastCreatedTime := res.TimeStamp;
          Result := ExtractFilePath(APath) + res.Name;
        end;}

        if CompareFileTime(res.FindData.ftCreationTime, lastCreatedFileTime) = 1 then begin
          lastCreatedFileTime := res.FindData.ftCreationTime;
          Result := ExtractFilePath(APath) + res.Name;
        end;

      until FindNext(res) <> 0;
    finally
      System.SysUtils.FindClose(res);
    end;
  end;
end;

begin
  WriteLn(getLastCreatedDirectory('C:\Program Files (x86)\*'));
  ReadLn;
end.

编辑2
由于res.TimeStamp似乎提供了上次修改日期,并且TSearchRec.Time字段已弃用,因此可以评估文件夹的创建时间,评估res.FindData.ftCreationTime记录的TSearchRec字段。< / p>

答案 2 :(得分:-2)

如果您自己创建的文件夹,即使名称是随机字符,也可以将该文件夹名称保存在数组中,但是如果由程序等创建文件夹, 你可以去文件夹

cd "path"
    exp: cd /home

并使用&#39; bellow&#39;命令按日期排序创建文件和文件夹,

所以如果有meny文件使用这个:

    ls -lt | less

也是&#39; head&#39;我觉得命令对你有用