◆[DELPHI]处理文件属性 attr:=filegetattr(filelistbox1.filename); if (attr and faReadonly)=faReadonly then ... //只读 if (attr and faSysfile)=faSysfile then ... //系统 if (attr and faArchive)=faArchive then ... //存档 if (attr and faHidden)=faHidden then ... //隐藏
可以使用FindFirst和FindNext函数查找文件,如: begin Found := FindFirst("c:\dir\*2003年12月*.abc", Attr, SearchRec); while Found = 0 do begin ProcessSearchRec(SearchRec); Found := FindNext(SearchRec); end; FindClose(SearchRec); end;
TSearchRec类型定义如下: type TSearchRec = record Time : Integer; Size : Integer; Attr : Integer; Name : TFileName; ExcludeAttr : Integer; FindHandle : THandle; FindData : TWin32FindData; end;
procedure TfrmFileTime.Button1Click(Sender: TObject); var tmpStr:string; begin if OpenDialog1.Execute then tmpStr:=OpenDialog1.FileName; Memo2.Text:='文件名:'+tmpStr; Memo2.Lines.Append('文件创建时间:'+DateTimeToStr(FGetFileTime(tmpStr,0))); Memo2.Lines.Append('文件修改时间:'+DateTimeToStr(FGetFileTime(tmpStr,1))); Memo2.Lines.Append('文件最后访问时间:'+DateTimeToStr(FGetFileTime(tmpStr,2))); end;function TfrmFileTime.FGetFileTime(sFileName: string; TimeType: integer): TDateTime; var ffd:TWin32FindData; dft:DWord; lft,Time:TFileTime; h:THandle; begin h:=FindFirstFile(Pchar(sFileName),ffd); case TimeType of 0:Time:=ffd.ftCreationTime; 1:Time:=ffd.ftLastWriteTime; 2:Time:=ffd.ftLastAccessTime; end; //case //获取文件信息 if h<>INVALID_HANDLE_VALUE then begin //转换FILETIME格式为localFILETIME格式 FileTimeToLocalFileTime(Time,lft); //localFILETIME转换为DOStime格式 FileTimeToDosDateTime(lft,LongRec(dft).Hi,LongRec(dft).Lo); //转换DOStime格式为Delphi的TDateTime格式 Result:=FileDateToDateTime(dft); end else result:=0; end;
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colFiles = objWMIService.ExecQuery _
("Select * from CIM_Datafile Where name = 'c:\\Scripts\\Adsi.vbs'")
For Each objFile in colFiles
Wscript.Echo "Access mask: " & objFile.AccessMask
Wscript.Echo "Archive: " & objFile.Archive
Wscript.Echo "Compressed: " & objFile.Compressed
Wscript.Echo "Compression method: " & objFile.CompressionMethod
Wscript.Echo "Creation date: " & objFile.CreationDate
Wscript.Echo "Computer system name: " & objFile.CSName
Wscript.Echo "Drive: " & objFile.Drive
Wscript.Echo "8.3 file name: " & objFile.EightDotThreeFileName
Wscript.Echo "Encrypted: " & objFile.Encrypted
Wscript.Echo "Encryption method: " & objFile.EncryptionMethod
Wscript.Echo "Extension: " & objFile.Extension
Wscript.Echo "File name: " & objFile.FileName
Wscript.Echo "File size: " & objFile.FileSize
Wscript.Echo "File type: " & objFile.FileType
Wscript.Echo "File system name: " & objFile.FSName
Wscript.Echo "Hidden: " & objFile.Hidden
Wscript.Echo "Last accessed: " & objFile.LastAccessed
Wscript.Echo "Last modified: " & objFile.LastModified
Wscript.Echo "Manufacturer: " & objFile.Manufacturer
Wscript.Echo "Name: " & objFile.Name
Wscript.Echo "Path: " & objFile.Path
Wscript.Echo "Readable: " & objFile.Readable
Wscript.Echo "System: " & objFile.System
Wscript.Echo "Version: " & objFile.Version
Wscript.Echo "Writeable: " & objFile.Writeable
Next
attr:=filegetattr(filelistbox1.filename);
if (attr and faReadonly)=faReadonly then ... //只读
if (attr and faSysfile)=faSysfile then ... //系统
if (attr and faArchive)=faArchive then ... //存档
if (attr and faHidden)=faHidden then ... //隐藏
工具:DELPHI 6.0
问题:
假如某一个目录下有几个文件,例如(工人工资2003年12月已经发.abc 领导工资2003年12月未发.abc 流氓工资2003年12月核定.abc)三个文件,而我要对三个都进行操作,操作的依据是时间等于2003年12月,在这里面除了字符串2003年12月和后缀名 .abc是固定的外,其它都是不一定的,请问,在程序中,如何获取这三个文件名?在 DELPHI 6 中,获取文件的函数又是哪个?谢谢(林立峰)
可以使用FindFirst和FindNext函数查找文件,如:
begin
Found := FindFirst("c:\dir\*2003年12月*.abc", Attr, SearchRec);
while Found = 0 do
begin
ProcessSearchRec(SearchRec);
Found := FindNext(SearchRec);
end;
FindClose(SearchRec);
end;
TSearchRec类型定义如下:
type
TSearchRec = record
Time : Integer;
Size : Integer;
Attr : Integer;
Name : TFileName;
ExcludeAttr : Integer;
FindHandle : THandle;
FindData : TWin32FindData;
end;
当利用FindFirst和FindNext函数找到一个文件后,利用这个类型可以获得文件的属性、大小和修改时间等信息。
var
tmpStr:string;
begin
if OpenDialog1.Execute then
tmpStr:=OpenDialog1.FileName;
Memo2.Text:='文件名:'+tmpStr;
Memo2.Lines.Append('文件创建时间:'+DateTimeToStr(FGetFileTime(tmpStr,0)));
Memo2.Lines.Append('文件修改时间:'+DateTimeToStr(FGetFileTime(tmpStr,1)));
Memo2.Lines.Append('文件最后访问时间:'+DateTimeToStr(FGetFileTime(tmpStr,2)));
end;function TfrmFileTime.FGetFileTime(sFileName: string;
TimeType: integer): TDateTime;
var
ffd:TWin32FindData;
dft:DWord;
lft,Time:TFileTime;
h:THandle;
begin
h:=FindFirstFile(Pchar(sFileName),ffd);
case TimeType of
0:Time:=ffd.ftCreationTime;
1:Time:=ffd.ftLastWriteTime;
2:Time:=ffd.ftLastAccessTime;
end; //case
//获取文件信息
if h<>INVALID_HANDLE_VALUE then
begin
//转换FILETIME格式为localFILETIME格式
FileTimeToLocalFileTime(Time,lft);
//localFILETIME转换为DOStime格式
FileTimeToDosDateTime(lft,LongRec(dft).Hi,LongRec(dft).Lo);
//转换DOStime格式为Delphi的TDateTime格式
Result:=FileDateToDateTime(dft);
end
else
result:=0;
end;