DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: laidabin
今日帖子: 1
在线用户: 0
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 caiyang123456 (cy) ▲▲▲△△ -
普通会员
2019/10/16 21:34:53
标题:
请问DELPHI怎么获取文件夹里的文件详细信息? 浏览:1169
加入我的收藏
楼主: 比如文件修改日期、类型、大小等等,是不是有相关函数?
谢谢大家!
----------------------------------------------
-
作者:
男 tuesdays (Tuesday) ▲▲▲▲△ -
普通会员
2019/10/16 22:52:32
1楼: jcl组件。。。
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
男 bahamut8348 (leonna) ★☆☆☆☆ -
普通会员
2019/10/16 22:55:01
1楼: windows系统:
获取时间:
getfiletime()
获取图标、类型:
shgetfileinfo()
获取大小:
getfilesize()

linux系统:
stat、lstat、fstat系列函数,自己看着用吧
----------------------------------------------
--
作者:
男 grjs_2004 (grjsITname) ★☆☆☆☆ -
盒子活跃会员
2019/10/17 8:30:53
2楼: delphi其实调用是操作系统的API!
----------------------------------------------
Everyone will to do best!
作者:
男 earthsbest (全能中间件) ▲▲▲▲△ -
普通会员
2019/10/17 11:27:22
3楼: unit Win.FileInfo;

{$WARN SYMBOL_PLATFORM OFF}

interface

uses
  vcl.Forms, Winapi.ShellAPI, Winapi.Windows, System.SysUtils;

type
  EFileInfo = Exception;
  TLangInfoBuffer = array [1 .. 4] of SmallInt;

  TFileInfo = class
  private
    FSearchRec: TSearchRec;
    FVerBlk: TVSFixedFileInfo;
    FFileName: string;
    function GetFileVersion(AFileName: string): Boolean;

    function GetVersionString: string;
    function GetOS: string;
    function GetPath: string;
    function GetFileName: string;
    function GetName: string;
    function GetDosFileName: string;
    function GetFileExt: string;
    function GetFileType: string;
    function GetFileSize: LongInt;
    function GetIsDebugBuild: Boolean;
    function GetIsPreRelease: Boolean;
    function GetIsPrivateBuild: Boolean;
    function GetIsSpecialBuild: Boolean;
    function GetIsDirectory: Boolean;
    function GetIsHidden: Boolean;
    function GetIsSystemFile: Boolean;
    function GetIsArchive: Boolean;
    function GetCreationTime: TDateTime;
    function GetLastAccessed: TDateTime;
    function GetLastWritten: TDateTime;
  public
    constructor Create(AFileName: string);
    destructor Destroy; override;

    function Execute: Integer;

    property Version: string read GetVersionString;
    property OS: string read GetOS;
    property Path: string read GetPath;
    property FileName: string read GetFileName;
    property Name: string read GetName;
    property DosFileName: string read GetDosFileName;
    property FileExt: string read GetFileExt;
    property FileType: string read GetFileType;
    property Size: LongInt read GetFileSize;
    property IsDebugBuild: Boolean read GetIsDebugBuild;
    property IsPreRelease: Boolean read GetIsPreRelease;
    property IsPrivateBuild: Boolean read GetIsPrivateBuild;
    property IsSpecialBuild: Boolean read GetIsSpecialBuild;
    property IsDirectory: Boolean read GetIsDirectory;
    property IsHidden: Boolean read GetIsHidden;
    property IsSystemFile: Boolean read GetIsSystemFile;
    property IsArchive: Boolean read GetIsArchive;
    property CreationTime: TDateTime read GetCreationTime;
    property LastAccessed: TDateTime read GetLastAccessed;
    property LastWritten: TDateTime read GetLastWritten;
  end;

implementation


constructor TFileInfo.Create(AFileName: string);
begin
  inherited Create;
  FFileName := AFileName;
  if FindFirst(AFileName, faReadOnly + faHidden + faSysFile + faDirectory + faArchive + faAnyFile, FSearchRec) <> 0 then
    RaiseLastOSError;
end;

destructor TFileInfo.Destroy;
begin
  FindClose(FSearchRec);
end;

function TFileInfo.GetFileVersion(AFileName: string): Boolean;
var
  InfoSize, puLen: DWord;
  Pt, InfoPtr: Pointer;
begin
  InfoSize := GetFileVersionInfoSize(PChar(AFileName), puLen);
  FillChar(FVerBlk, SizeOf(TVSFixedFileInfo), 0);
  if InfoSize > 0 then
  begin
    GetMem(Pt, InfoSize);
    GetFileVersionInfo(PChar(AFileName), 0, InfoSize, Pt);
    VerQueryValue(Pt, '\', InfoPtr, puLen);
    Move(InfoPtr^, FVerBlk, SizeOf(TVSFixedFileInfo));
    FreeMem(Pt);
    Result := True;
  end
  else
    Result := False;
end;

function TFileInfo.GetVersionString: string;
begin
  if GetFileVersion(FFileName) then
    Result := Format('%u.%u.%u.%u',
      [HiWord(FVerBlk.dwProductVersionMS),
      LoWord(FVerBlk.dwProductVersionMS),
      HiWord(FVerBlk.dwProductVersionLS),
      LoWord(FVerBlk.dwProductVersionLS)])
  else
    Result := '';
end;

function TFileInfo.GetIsDebugBuild: Boolean;
begin
  Result := False;
  if GetFileVersion(FFileName) then
    Result := (FVerBlk.dwFileFlagsMask and FVerBlk.dwFileFlags and
      VS_FF_DEBUG) <> 0;
end;

function TFileInfo.GetIsPreRelease: Boolean;
begin
  Result := False;
  if GetFileVersion(FFileName) then
    Result := (FVerBlk.dwFileFlagsMask and FVerBlk.dwFileFlags and VS_FF_PRERELEASE) <> 0;
end;

function TFileInfo.GetIsPrivateBuild: Boolean;
begin
  Result := False;
  if GetFileVersion(FFileName) then
    Result := (FVerBlk.dwFileFlagsMask and FVerBlk.dwFileFlags and VS_FF_PRIVATEBUILD) <> 0;
end;

function TFileInfo.GetIsSpecialBuild: Boolean;
begin
  Result := False;
  if GetFileVersion(FFileName) then
    Result := (FVerBlk.dwFileFlagsMask and FVerBlk.dwFileFlags and VS_FF_SPECIALBUILD) <> 0;
end;

function TFileInfo.GetOS: string;
begin
  if GetFileVersion(FFileName) then
    case FVerBlk.dwFileOS of
      VOS_DOS_WINDOWS16:
        Result := 'MS-DOS or 16 bit Windows';
      VOS_DOS_WINDOWS32:
        Result := '32 bit Windows';
      VOS_OS216_PM16:
        Result := '16 bit OS/2';
      VOS_OS232_PM32:
        Result := '32 bit OS/2';
      VOS__WINDOWS32:
        Result := 'Win32 or Windows NT';
    else
      Result := 'Unknown OS';
    end
  else
    Result := '';
end;

function TFileInfo.GetFileType: string;
var
  S: string;
begin
  S := '';
  if GetFileVersion(FFileName) then
  begin
    case FVerBlk.dwFileType of
      VFT_APP:
        S := 'Application';
      VFT_DLL:
        S := 'Dynamic Link Library (DLL)';
      VFT_DRV:
        begin
          S := 'Device Driver - ';
          case FVerBlk.dwFileSubtype of
          VFT2_DRV_PRINTER:
          S := S + 'Printer';
          VFT2_DRV_KEYBOARD:
          S := S + 'Keyboard';
          VFT2_DRV_LANGUAGE:
          S := S + 'Language';
          VFT2_DRV_DISPLAY:
          S := S + 'Display';
          VFT2_DRV_MOUSE:
          S := S + 'Mouse';
          VFT2_DRV_NETWORK:
          S := S + 'Network';
          VFT2_DRV_SYSTEM:
          S := S + 'System';
          VFT2_DRV_INSTALLABLE:
          S := S + 'Installable';
          VFT2_DRV_SOUND:
          S := S + 'Sound';
          else
          S := S + 'Unknown';
          end;
        end;
      VFT_FONT:
        begin
          S := 'Font File - ';
          case FVerBlk.dwFileSubtype of
          VFT2_FONT_RASTER:
          S := S + 'Raster';
          VFT2_FONT_VECTOR:
          S := S + 'Vector';
          VFT2_FONT_TRUETYPE:
          S := S + 'TrueType';
          else
          S := S + 'Unknown';
          end;
        end;
      VFT_VXD:
        S := 'Virtual Device';
      VFT_STATIC_LIB:
        S := 'Static Link Library';
    else
      S := 'Unknown File Type';
    end;
  end;
  Result := S;
end;

function TFileInfo.GetPath: string;
begin
  Result := ExtractFilePath(FFileName);
end;

function TFileInfo.GetFileName: string;
begin
  Result := ExtractFileName(FFileName);
end;

function TFileInfo.GetName: string;
begin
  if Pos(FileExt, FileName) >= 0 then
    Result := Copy(FileName, 0, Pos(FileExt, FileName) - 1)
  else
    Result := FileName;
end;

function TFileInfo.GetDosFileName: string;
begin
  Result := StrPas(FSearchRec.FindData.cAlternateFileName)
end;

function TFileInfo.GetFileExt: string;
begin
  Result := ExtractFileExt(FFileName);
end;

function TFileInfo.GetIsDirectory: Boolean;
begin
  Result := FSearchRec.Attr and faDirectory = faDirectory;
end;

function TFileInfo.GetIsHidden: Boolean;
begin
  Result := FSearchRec.Attr and faHidden = faHidden;
end;

function TFileInfo.GetIsSystemFile: Boolean;
begin
  Result := FSearchRec.Attr and faSysFile = faSysFile;
end;

function TFileInfo.GetIsArchive: Boolean;
begin
  Result := FSearchRec.Attr and faArchive = faArchive;
end;

function TFileInfo.GetFileSize: LongInt;
begin
  Result := FSearchRec.Size;
end;

function TFileInfo.GetCreationTime: TDateTime;
var
  LTime: TFileTime;
  Systemtime: TSystemtime;
begin
  FileTimeToLocalFileTime(FSearchRec.FindData.ftCreationTime, LTime);
  FileTimeToSystemTime(LTime, Systemtime);
  Result := SystemTimeToDateTime(Systemtime);
end;

function TFileInfo.GetLastAccessed: TDateTime;
var
  LTime: TFileTime;
  Systemtime: TSystemtime;
begin
  FileTimeToLocalFileTime(FSearchRec.FindData.ftLastAccessTime, LTime);
  FileTimeToSystemTime(LTime, Systemtime);
  Result := SystemTimeToDateTime(Systemtime);
end;

function TFileInfo.GetLastWritten: TDateTime;
var
  LTime: TFileTime;
  Systemtime: TSystemtime;
begin
  FileTimeToLocalFileTime(FSearchRec.FindData.ftLastWriteTime, LTime);
  FileTimeToSystemTime(LTime, Systemtime);
  Result := SystemTimeToDateTime(Systemtime);
end;

function TFileInfo.Execute: Integer;
begin
  Result := ShellExecute(Application.Handle, 'open', PChar(FFileName), '', PChar(Path), SW_SHOWDEFAULT);
end;

end.
此帖子包含附件:
PNG 图像
大小:61.8K
----------------------------------------------
Delphi4Linux Delphi三层/FireDAC 技术群:734515869 http://www.cnblogs.com/rtcmw
作者:
女 lesliehuang (leslie) ▲▲△△△ -
普通会员
2019/10/17 14:21:38
4楼: 我家女儿已经六岁多快七岁了,按照国内的同龄人的水平,应该学会写字了。但是由于在这边接触到的中文课程不够,远远比不上国内的全中文的环境,在女儿刚到六岁时,我就有点就写中文这件事有些焦虑。但是让自家小孩学北京pk10会写中国字的决心还是有的,于是一路摸着石头过河,现在小孩简单的字比如七、儿等等都差不多可以写出来啦。复杂的字像妈妈,爸爸之类的也在加紧学习。不知道宝妈们有没有相似的经历。在女儿取得这样的进步之后,我决定来写一写我家学写中文的历程,跟大家一起分享讨论一些如何更好的帮助孩子学中文。


首先最开始我就是自己explore,由于自己并不是专业的老师,也不知道如何去进行中文的教学,也就是平常跟孩子说中国话,每天督促他学习中文之类的。但是学写字跟学说话是一个完全不同的概念。所以一开始,我先去网上看了各种理论,现在网上资源很多,一些资深教中午的老师分享也很多,所以我基本就是在网站还有公众号里先看看基本的理论,了解一下学中文大概的过程和注意事项。加上公众号里还有一些免费的资源,这种分类的资源可以自由选择适合自己家宝宝的,也很方便。,,
其次学中文的APP也很多,我家最常用的学写字的APP是Chinese skill。在里面学习笔画和字的构成十分方便,再加上重庆时时彩又是在IPAD上学,女儿本身也不抵触,一开始还觉得是在画画玩。

然后还有一个我觉得给我家女儿很大帮助的就是线上中文学习一对一课程。这也是我最近才发现的。因为家长不是老师的话,再怎么样也还是个门外汉,虽然会讲中文但是并不会教,而中文又是公认的难。周末group的开奖网学习根本不够,何况有些老师的发音也不那么标准,课后交流也是英文为主。这种分散式慢慢磨时间的学习对于中文来说并不怎么适用。我还是希望我家儿子能够得到比较好的成系统化的中文教学,不说赶上国内语言教学,但再怎么样也不能落下呀。一对一的话可以有一个更加沉浸式的学中文的环境,加上选择的老师比较专业,也有一套成熟的教学方法,一个月上下来,孩子在口语阅读和写字上都有了很大进步。
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2019/10/17 14:28:46
5楼: 到了国外,就要学会 国外 公立学校的 开放。
例如 成绩不重要,例如 不能表现太聪明,否则就不合群。
例如 别人都找对象,你也不能例外。
到了高中,就要学会 性开放,还有大麻是合法的。不合法的人家也不怕。
到了 大学... 可能是到不了的,去社区大学吧。也就是 中国的 野鸡大学。
这样下来的人,我觉得 没必要学中文。真的,学了也是白学。没机会到中国发展的。

如果是老外,肤色不一样,还能回国装洋大人。你黄皮肤的回国,就只能被当普通人。 没有任何特权。还不如留在美国,至少 其他美国人也是这样长大的。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 caiyang123456 (cy) ▲▲▲△△ -
普通会员
2019/10/17 18:22:56
6楼: 谢谢大家!那获取文件夹里所有文件信息,有相关的函数吗?因为我需要实时检查文件夹的内容,通过获取最新文件的修改时间来判断有无更新。
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2019/10/17 18:50:45
7楼: 微软有一个 API 能报告指定目录下的变化。可惜我懒得去找 API 的定义。
我记得一些控件,实现了这个 API。
当然,自己实现,也是完全可以的。
不过就是 写代码而已。
如果你懒得写,雇我,只需要 人民币 500万即可。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 earthsbest (全能中间件) ▲▲▲▲△ -
普通会员
2019/10/18 12:11:42
8楼: 新版的用System.IOUtils.TFile、TDirectory 基本可以实现你的要求了。

CnPack有个CnFileSystemWatcher 可以监视到某目录(可包括子目录)
下的文件、目录发生的名称修改、大小改变、访问时间改变等、事件的发生。
----------------------------------------------
Delphi4Linux Delphi三层/FireDAC 技术群:734515869 http://www.cnblogs.com/rtcmw
作者:
男 crystalmoon (crystalmoon) ★☆☆☆☆ -
盒子活跃会员
2019/10/18 15:57:02
9楼: 老王,你楼上的那个帖子是给 某 beijin p*k*10 的菠菜做引流的。。。。其他都是欺骗搜索引擎的。
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行92.77344毫秒 RSS