当前位置:主页>销售管理软件> 列表

怎样可以获取指定目录的属性 找金碟财务软件

财务软件版1楼: 各位朋友,小弟用Delphi做了一个同步的东西,用Delphi进行目录拷贝(包括子目录和该目录下所有的文件)。
想请教一下各位朋友,怎样可以在进行目录或文件拷贝后,可以获取源目录和目标目录的属性,然后根据两者进行判断,如果属性相同则在edit1.text显示“拷贝完成”,否则显示“没有成功”,请各位朋友赐教,多谢!!!

2楼: 好像这样做的人比较少,不过,我帮你顶一下 如金碟财务软件

3楼: 来自: qiulp, 时间: 2004-10-25 13:13:01, ID: 2864693
procedure TForm1.Button1Click(Sender: TObject);
var
Attrs: Integer;
begin
Attrs := FileGetAttr(''D:\MyFile.sys'');
if (Attrs and faHidden) = 0 then
FileSetAttr(''D:\MyFile.sys'', Attrs + faHidden);
end;


来自: wxjourspace, 时间: 2004-10-25 13:19:37, ID: 2864703
用FileSetAttr函数
function FileSetAttr(const FileName: string; Attr: Integer): Integer;

其Attr包括以下几个常数;
Constant Value Description
faReadOnly $00000001 Read-only files
faHidden $00000002 Hidden files
faSysFile $00000004 System files
faVolumeID $00000008 Volume ID files
faDirectory $00000010 Directory files
faArchive $00000020 Archive files
faAnyFile $0000003F Any filefaReadOnly; faArchive;faSysFile; faHidden;

如果要把文件设为隐藏,FileSetAttr(FileName, faHidden)就可以了

你也可以使用WindowsApi函数SetFileAttributes进行修改.


来自: nnnnnnm, 时间: 2004-10-25 13:26:12, ID: 2864723
谢谢楼上二位,你们更改的好像是文件,不知目录如何更改。

来自: qiulp, 时间: 2004-10-25 14:03:51, ID: 2864784
有区别吗?你自己换成目录名称试试都不行吗???这么懒!

4楼: 以下方法参考一下:
uses ..., ShellApi;

procedure PropertiesDialog(filename:String);
var
sei: TShellExecuteInfo;
begin
FillChar(sei, SizeOf(sei), 0);
sei.cbSize := SizeOf(sei);
sei.lpFile := PChar(filename);
sei.lpVerb := ''properties'';
sei.fMask := SEE_MASK_INVOKEIDLIST;
ShellExecuteEx(@sei);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if Opendialog1.Execute then
begin
PropertiesDialog(Opendialog1.FileName);
end;
end;

5楼: 首先多谢楼上各位朋友的热心回复,
来自:mdjcnc, 时间:2006-1-25 11:13:10, ID:3340676
好像这样做的人比较少,不过,我帮你顶一下
兄弟,你这样说是什么意思,难道有什么更好的方法吗?如果有的话,请提供一下,多谢!!!

6楼: 要判断两个目录是否一至,要对比它的子目录下的文件的最后修改时间和文件大小,楼上几个说的基本都没说到点子上...你用FindFirst()配合FindNext()遍历目录下的子目录,并从SearchRec得到文件的最后修改时间和文件大小.对照一下就可以了.由于没有现成的程序,只能提供给你一个递归查找文件的例子,让你领会一下精神.如果要想得到如你所需的例子,估计你的分少了点,加到300可以帮你写一段.

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
ListBox1: TListBox;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

TSearchFileThread=class(TThread)
private
MyFileName: string;
procedure SearchFile(DirName: string);
procedure DeelWithFile;
procedure SearchComplete;
public
MyDirName: string;
protected
procedure Execute; override;

end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TSearchFileThread.DeelWithFile;
begin
Form1.ListBox1.Items.Insert(0, MyFileName);
end;

procedure TSearchFileThread.SearchFile(DirName: String);
Var
Found: integer;
SearchRec: TSearchRec;
begin
Found := FindFirst(DirName + ''*.*'',faAnyFile,searchrec);
while Found = 0 do
begin
if ((SearchRec.Attr and faDirectory)<>0) then //directory
begin
if(SearchRec.Name <> ''.'')and(SearchRec.Name <> ''..'') then
SearchFile(DirName + SearchRec.Name + ''\'')


///////////SearchRec.Name是文件名,SearchRec.Size是文件大小,SearchRec.FindData.FtLastWriteTime是最后修改时间.
end
else //file
begin
MyFileName := DirName + SearchRec.Name;
Synchronize(DeelWithFile);
end;
Found := FindNext(SearchRec);
end;
FindClose(SearchRec);
end;

procedure TSearchFileThread.SearchComplete;
begin
ShowMessage(''搜索完毕,共找到'' + inttostr(Form1.ListBox1.Items.Count) + ''个文件'');
end;

procedure TSearchFileThread.Execute;
begin
SearchFile(MyDirName);
Synchronize(SearchComplete);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
SearchFileThread: TSearchFileThread;
begin
SearchFileThread := TSearchFileThread.Create(true);
SearchFileThread.MyDirName := ''F:\''; //必须以 ''\'' 结尾
SearchFileThread.Resume;
end;

end.