菜鸟问题,解决即送50分! (如何把指定目录的文件全部删除?) (50分)

  • 主题发起人 主题发起人 chinawen
  • 开始时间 开始时间
C

chinawen

Unregistered / Unconfirmed
GUEST, unregistred user!
本来是长文件名, 而在注册表被转换成短目录格式, DELPHI如何把从注册表获得的短文件名格式转换回长目录?
 
Function GetShortFilename (LongFilename: String):
String;
; ; ;var
; ; ; ; ShortFile: pChar;
; ; ;begin
; ; ; ; ShortFile := StrAlloc (MAX_PATH + 1);
; ; ; ; Try
; ; ; ; ; ;if GetShortPathName (pChar (LongFilename),
ShortFile, MAX_PATH + 1) = 0 then //转换错误
; ; ; ; ; ; ;//The GetShortPathName function obtains the
short path form of a specified input path.(Windows API
Help)
; ; ; ; ; ; ; Raise EConvertError.Create
('GetShortFilename: ' +SysErrorMessage (GetLastError));
; ; ; ; ; ; Result := String (ShortFile);
; ; ; ; Finally
; ; ; ; ; ; StrDispose (ShortFile);
; ; ; ; end;
; ;end;
(2)使用FingFirst/FindClose函数。在
SearchRec.FindData.Shortname属性中包含文件的DOS文件名称
; 附:function FindFirst(const Path: string; Attr: Integer;
var F: TSearchRec): Integer;
; ; ; ;TSearchRec = record
; ; ; ; ; Time: Integer; ;//文件时间
; ; ; ; ; Size: Integer; ;//文件大小
; ; ; ; ; Attr: Integer; ;//文件属性
; ; ; ; ; Name: TFileName; //文件名称(TFileName = string)
; ; ; ; ; ExcludeAttr: Integer;
; ; ; ; ; FindHandle: THandle;
; ; ; ; ; FindData: TWin32FindData; //其他的信息,比如:创
建日期/最后一次访问日期/长/短文件名称
; ; ; end
 
TO :boyD
;谢谢!

问题应该是这样的:
本来是长目录名, 而在注册表被转换成短目录格式, DELPHI如何把从注册表获得的短文件名格式转换回长目录?
 
API里有这么一个函数..
自己查一下..
 
TO: coolcat
api里有个GetFullPathName , 但它是要先知道具体文件, 然后有由此文件获得
FullPathName. 我是想通过, 从注册表获得某应用程序(当前可用)目录, 然
后用此目录来定位某文件。 ;谢谢!
 
哎, 如何把获得的由长目录转换短目录名在再转换回长目录格式? 多谢了! 谁帮我?
 
刚才试了一下GetFullPathName。没成功。
但是使用FindFirstFile似乎可以,但是只能得到最后以及的全部路径。
不如C:/Progra~1/micros~1,只能得到microsoft office等。
 
这个问题算了, 由以下问题来替换这个问题:
如何把指定目录的文件全部删除?
要求:
1、我跟菜,要有处理原码
2、包括子目录一块删除
3、要把代码大小降到最低限度
如果本人满意,再加50分!
 
unit Unit1;

interface

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

type
; TForm1 = class(TForm)
; ; Panel1: TPanel;
; ; StaticText1: TStaticText;
; ; StaticText2: TStaticText;
; ; Edit1: TEdit;
; ; Edit2: TEdit;
; ; Button1: TButton;
; ; Button2: TButton;
; ; Button3: TButton;
; ; Button4: TButton;
; ; Button5: TButton;
; ; procedure Button1Click(Sender: TObject);
; ; procedure Button2Click(Sender: TObject);
; ; procedure Button3Click(Sender: TObject);
; ; procedure Button4Click(Sender: TObject);
; ; procedure Button5Click(Sender: TObject);
; private
; ; { Private declarations }
; public
; ; { Public declarations }
; end;

var
; Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
; Dir: string;
begin
; Dir := 'D:';
; if SelectDirectory(Dir, [sdAllowCreate, sdPerformCreate, sdPrompt],0) then
//函数执行成功
// sdAllowCreate:允许创建目录
// sdPerformCreate:执行创建目录
// sdPrompt:显示提示信息
; ; edit1.text:= Dir;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
; Dir: string;
begin
; Dir := 'D:';
; if SelectDirectory(Dir, [sdAllowCreate, sdPerformCreate, sdPrompt],0) then
;//解释同上
; ; edit2.text:= Dir;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
; OpStruc:TSHFileOpStruct;
; FromBuf,ToBuf:Array[0..128] of Char;
begin
; FillChar(FromBuf,Sizeof(FromBuf),0);
; FillChar(ToBuf,Sizeof(ToBuf),0);
; //用0初始化FromBuf和ToBuf数组
; StrPCopy(FromBuf,Pchar(Edit1.Text));
; StrPCopy(ToBuf,Pchar(Edit2.Text));
; //分别在 FromBuf和ToBuf数组中填入操作的源目录及目标目录
; //开始填充OpStruc记录
; with OpStruc do
; begin
; ; Wnd:=Handle;
; ; wFunc:=FO_COPY;
; //复制操作
; ; pFrom:=@FromBuf;
; ; pTo:=@ToBuf;
; ; fFlags:=FOF_NOCONFIRMATION or FOF_RENAMEONCOLLISION;
; ; fAnyOperationsAborted:=False;
; ; hNameMappings:=nil;
; ; lpszProgressTitle:=nil;
; end;
; if SHFileOperation(OpStruc)=0 then
;//函数执行成功
; MessageBox(Handle,'复制完毕。','复制信息',MB_OK+MB_ICONINFORMATION);
end;

procedure TForm1.Button4Click(Sender: TObject);
var
; OpStruc:TSHFileOpStruct;
; FromBuf,ToBuf:Array[0..128] of Char;
begin
; FillChar(FromBuf,Sizeof(FromBuf),0);
; FillChar(ToBuf,Sizeof(ToBuf),0);
; StrPCopy(FromBuf,Pchar(Edit1.Text));
; StrPCopy(ToBuf,Pchar(Edit2.Text));
; //开始填充OpStruc记录
; with OpStruc do
; begin
; ; Wnd:=Handle;
; ; wFunc:=FO_MOVE;
; ;//移动操作
; ; pFrom:=@FromBuf;
; ; pTo:=@ToBuf;
; ; fFlags:=FOF_NOCONFIRMATION or FOF_RENAMEONCOLLISION;
; ; fAnyOperationsAborted:=False;
; ; hNameMappings:=nil;
; ; lpszProgressTitle:='正在文件';
; end;
; if SHFileOperation(OpStruc)=0 then
; //执行成功
; MessageBox(Handle,'移动完毕。','移动信息',MB_OK+MB_ICONINFORMATION);
end;

procedure TForm1.Button5Click(Sender: TObject);
var
; OpStruc:TSHFileOpStruct;
; FromBuf:Array[0..128] of Char;
begin
; FillChar(FromBuf,Sizeof(FromBuf),0);
; StrPCopy(FromBuf,Pchar(Edit1.Text));
; //开始填充OpStruc记录
; with OpStruc do
; begin
; ; Wnd:=Handle;
; ; wFunc:=FO_DELETE;
; ; pFrom:=@FromBuf;
; ; pTo:=nil;
; ; fFlags:=FOF_NOCONFIRMATION;
; ; lpszProgressTitle:='正在删除';
; end;
; if SHFileOperation(OpStruc)=0 then
; //执行成功
; MessageBox(Handle,'删除完毕。','删除信息',MB_OK+MB_ICONINFORMATION);
end;

end.
 
var
; sh:TShFileOpStruct;
; dir:string;
begin
; sh.Wnd:=handle;
; dir:='c:/test/';{要删的目录}
; sh.wFunc:=FO_DELETE;
; sh.pFrom:=PChar(dir+'*.*'+chr(0));
; sh.pTo:=nil;
; sh.fFlags:=FOF_ALLOWUNDO;
; sh.hNameMappings:=nil;
; sh.lpszProgressTitle:='删除';
; if (ShFileOperation(sh))<>0 then
; begin
; ; ShowMessage('删除错误');
; end;
end;
 
to: zhhc,newsweep
; 多谢二位大虾!
; 很遗憾,我要求代码最小,不能出现正在删除的提示窗口,必须能在后台运行,
是彻底删除代码最小!!
;我有一方法, 就是使用FindFirstFile, FindNextFile. 但没调式成,再看看吧! 谢谢!
 
哈哈骗人骗财
 
谁说我骗人!!
虽然没有解决问题, 但楼上还是帮我不少,先把分送上,参与
者都有分,分少, 是我的一点心意。 多谢!!

问题继续, 还是希望热心人继续帮忙!
顺便帮我解释一下GetPrivateProfileString的用法。
 
我已经解决了,多谢各位的关心。 分数大家分吧! 我知道你们也不在乎,
;可我只能这样表示我的谢意, 希望以后多指导!
谢谢!
 
后退
顶部