我曾经做过的一个程序,可以浏览所有文件,并把它们放在TreeView中,如下:
procedure TForm1.Button1Click(Sender: TObject);
begin
TreeView1.Items.Clear();
WriteToView(Edit1.text,nil);
end;procedure TForm1.WriteToView(strName :string; curTreeNode :TTreeNode);
var
FName:THANDLE;
strTemp :string;
ss :WIN32_FIND_DATA;
MyTreeNode: TTreeNode;
begin
MyTreeNode := TreeView1.Items.AddChild(curTreeNode,strName); FName :=FindFirstFile(PChar(strName),ss);
if FName <>INVALID_HANDLE_VALUE then begin
strTemp:=string(ss.cFileName);
if strTemp[1] <>'.' then begin
if ss.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY then begin
delete(strName,length(strName)-2,3);
WriteToView(strName +strTemp+'\*.*',MyTreeNode);
strName :=strName +'*.*';
end
else TreeView1.Items.AddChild(MyTreeNode,strTemp);
end;
end else exit; while FindNextFile(FName,ss)do begin
strTemp :=string(ss.cFileName);
if strTemp[1] <>'.' then begin
if ss.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY then begin
delete(strName,length(strName)-2,3);
WriteToView(strName +strTemp+'\*.*',MyTreeNode);
strName :=strName +'*.*';
end
else TreeView1.Items.AddChild(MyTreeNode,strTemp);
end;
end;
end;这里,用Edit1输入文件夹的名称和所需要的类型,如果是所有文件,如你所说的,可以写入如下:
C:\Windows\Temporary Internet Files\*.*
即可。我想,在线层中使用也应该是可以的,你可以试试看,如果有问题,告诉我。
WirteToView(....)自己定义。
procedure TForm1.Button1Click(Sender: TObject);
begin
TreeView1.Items.Clear();
WriteToView(Edit1.text,nil);
end;procedure TForm1.WriteToView(strName :string; curTreeNode :TTreeNode);
var
FName:THANDLE;
strTemp :string;
ss :WIN32_FIND_DATA;
MyTreeNode: TTreeNode;
begin
MyTreeNode := TreeView1.Items.AddChild(curTreeNode,strName); FName :=FindFirstFile(PChar(strName),ss);
if FName <>INVALID_HANDLE_VALUE then begin
strTemp:=string(ss.cFileName);
if strTemp[1] <>'.' then begin
if ss.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY then begin
delete(strName,length(strName)-2,3);
WriteToView(strName +strTemp+'\*.*',MyTreeNode);
strName :=strName +'*.*';
end
else TreeView1.Items.AddChild(MyTreeNode,strTemp);
end;
end else exit; while FindNextFile(FName,ss)do begin
strTemp :=string(ss.cFileName);
if strTemp[1] <>'.' then begin
if ss.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY then begin
delete(strName,length(strName)-2,3);
WriteToView(strName +strTemp+'\*.*',MyTreeNode);
strName :=strName +'*.*';
end
else TreeView1.Items.AddChild(MyTreeNode,strTemp);
end;
end;
end;这里,用Edit1输入文件夹的名称和所需要的类型,如果是所有文件,如你所说的,可以写入如下:
C:\Windows\Temporary Internet Files\*.*
即可。我想,在线层中使用也应该是可以的,你可以试试看,如果有问题,告诉我。
WirteToView(....)自己定义。
里有所有的地址,可是应该用什么来打开它呢?
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, StdCtrls,shellapi,shdocvw,shlObj,wininet,mshtml, ExtCtrls;type
TForm1 = class(TForm)
Panel1: TPanel;
Button4: TButton;
Panel2: TPanel;
ListBox2: TListBox;
ListBox1: TListBox;
Splitter1: TSplitter;
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.DFM}const TempInternet: string = 'C:\WINDOWS\Temporary Internet Files\Content.IE5\7BZR3LYA\';
//NT : TempInternet: string = '....';procedure TForm1.Button4Click(Sender: TObject);
var
FirstCacheHandle: THandle;
PFirstCacheEntryInfo,PNextCacheEntryInfo: PInternetCacheEntryInfoA;
FirstCacheEntryInfo,NextCacheEntryInfo: TInternetCacheEntryInfoA;
FirstCacheEntryInfoBufferSize,NextCacheEntryInfoBufferSize: Dword;
HaveItem :Boolean;
begin
HaveItem := True;
FirstCacheEntryInfoBufferSize := 0;
NextCacheEntryInfoBufferSize := 0;
FirstCacheEntryInfo.dwStructSize := FirstCacheEntryInfoBufferSize;
NextCacheEntryInfo.dwStructSize := NextCacheEntryInfoBufferSize;
GetMem(PFirstCacheEntryInfo,sizeof(TInternetCacheEntryInfoA));
GetMem(PNextCacheEntryInfo,sizeof(TInternetCacheEntryInfoA));
//Dispose(PNextCacheEntryInfo);
PFirstCacheEntryInfo^.dwStructSize := sizeof(TInternetCacheEntryInfoA);
PNextCacheEntryInfo^.dwStructSize := sizeof(TInternetCacheEntryInfoA);
FirstCacheHandle := 0;
while FirstCacheHandle=0 do
begin
FirstCacheHandle :=FindFirstUrlCacheEntryEx
('',0,URLCACHE_FIND_DEFAULT_FILTER
,0,PFirstCacheEntryInfo,@FirstCacheEntryInfoBufferSize,nil,nil,nil);
if FirstCacheHandle =0 then
begin
//Freemem(PFirstCacheEntryInfo);
case GetLastError of
ERROR_NO_MORE_ITEMS :
begin
FindCloseUrlCache(FirstCacheHandle);
FreeMem(PFirstCacheEntryInfo);
Break;
end;
ERROR_INSUFFICIENT_BUFFER :
begin
FreeMem(PFirstCacheEntryInfo);
GetMem(PFirstCacheEntryInfo,FirstCacheEntryInfoBufferSize);
PFirstCacheEntryInfo^.dwStructSize := FirstCacheEntryInfoBufferSize;
continue;
end;
else
begin
showmessage('Can not Press Cache!');
Break;
end;
end;
end;
end ;
try
while HaveItem=true do
begin
if not (FindNextUrlCacheEntryEx(FirstCacheHandle,PNextCacheEntryInfo,
@NextCacheEntryInfoBufferSize,nil,nil,nil)) then
begin
//FreeMem(PNextCacheEntryInfo);
case GetLastError of
ERROR_NO_MORE_ITEMS :
begin
FindCloseUrlCache(FirstCacheHandle);
HaveItem :=false;
continue;
end;
ERROR_INSUFFICIENT_BUFFER :
begin
FreeMem(PNextCacheEntryInfo);
GetMem(PNextCacheEntryInfo,NextCacheEntryInfoBufferSize);
PNextCacheEntryInfo^.dwStructSize := NextCacheEntryInfoBufferSize;
continue;
end;
else
begin
FreeMem(PNextCacheEntryInfo);
showmessage('Error');
Break;
end;
end;
end
else
begin
Listbox1.items.add(strpas(PNextCacheEntryInfo^.lpszSourceUrlName));
Listbox2.items.add(strpas(PNextCacheEntryInfo^.lpszLocalFileName));
end;
end;
except
end;
//freemem(PFirstCacheEntryInfo);
//freemem(PNextCacheEntryInfo);
//Dispose(PFirstCacheEntryInfo);
end;end.
以前做的,你可以改一下。
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, StdCtrls,shellapi,shdocvw,shlObj,wininet,mshtml, ExtCtrls;type
TForm1 = class(TForm)
Panel1: TPanel;
Button4: TButton;
Panel2: TPanel;
ListBox2: TListBox;
ListBox1: TListBox;
Splitter1: TSplitter;
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.DFM}const TempInternet: string = 'C:\WINDOWS\Temporary Internet Files\Content.IE5\7BZR3LYA\';
//NT : TempInternet: string = '....';procedure TForm1.Button4Click(Sender: TObject);
var
FirstCacheHandle: THandle;
PFirstCacheEntryInfo,PNextCacheEntryInfo: PInternetCacheEntryInfoA;
FirstCacheEntryInfo,NextCacheEntryInfo: TInternetCacheEntryInfoA;
FirstCacheEntryInfoBufferSize,NextCacheEntryInfoBufferSize: Dword;
HaveItem :Boolean;
begin
HaveItem := True;
FirstCacheEntryInfoBufferSize := 0;
NextCacheEntryInfoBufferSize := 0;
FirstCacheEntryInfo.dwStructSize := FirstCacheEntryInfoBufferSize;
NextCacheEntryInfo.dwStructSize := NextCacheEntryInfoBufferSize;
GetMem(PFirstCacheEntryInfo,sizeof(TInternetCacheEntryInfoA));
GetMem(PNextCacheEntryInfo,sizeof(TInternetCacheEntryInfoA));
//Dispose(PNextCacheEntryInfo);
PFirstCacheEntryInfo^.dwStructSize := sizeof(TInternetCacheEntryInfoA);
PNextCacheEntryInfo^.dwStructSize := sizeof(TInternetCacheEntryInfoA);
FirstCacheHandle := 0;
while FirstCacheHandle=0 do
begin
FirstCacheHandle :=FindFirstUrlCacheEntryEx
('',0,URLCACHE_FIND_DEFAULT_FILTER
,0,PFirstCacheEntryInfo,@FirstCacheEntryInfoBufferSize,nil,nil,nil);
if FirstCacheHandle =0 then
begin
//Freemem(PFirstCacheEntryInfo);
case GetLastError of
ERROR_NO_MORE_ITEMS :
begin
FindCloseUrlCache(FirstCacheHandle);
FreeMem(PFirstCacheEntryInfo);
Break;
end;
ERROR_INSUFFICIENT_BUFFER :
begin
FreeMem(PFirstCacheEntryInfo);
GetMem(PFirstCacheEntryInfo,FirstCacheEntryInfoBufferSize);
PFirstCacheEntryInfo^.dwStructSize := FirstCacheEntryInfoBufferSize;
continue;
end;
else
begin
showmessage('Can not Press Cache!');
Break;
end;
end;
end;
end ;
try
while HaveItem=true do
begin
if not (FindNextUrlCacheEntryEx(FirstCacheHandle,PNextCacheEntryInfo,
@NextCacheEntryInfoBufferSize,nil,nil,nil)) then
begin
//FreeMem(PNextCacheEntryInfo);
case GetLastError of
ERROR_NO_MORE_ITEMS :
begin
FindCloseUrlCache(FirstCacheHandle);
HaveItem :=false;
continue;
end;
ERROR_INSUFFICIENT_BUFFER :
begin
FreeMem(PNextCacheEntryInfo);
GetMem(PNextCacheEntryInfo,NextCacheEntryInfoBufferSize);
PNextCacheEntryInfo^.dwStructSize := NextCacheEntryInfoBufferSize;
continue;
end;
else
begin
FreeMem(PNextCacheEntryInfo);
showmessage('Error');
Break;
end;
end;
end
else
begin
Listbox1.items.add(strpas(PNextCacheEntryInfo^.lpszSourceUrlName));
Listbox2.items.add(strpas(PNextCacheEntryInfo^.lpszLocalFileName));
end;
end;
except
end;
//freemem(PFirstCacheEntryInfo);
//freemem(PNextCacheEntryInfo);
//Dispose(PFirstCacheEntryInfo);
end;end.
以前做的,可以改一下