高难度:如何禁止删除指定的文件或文件夹.

bmsword 2004-09-27 02:18:40
如题....
...全文
318 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ly_liuyang 2004-09-27
  • 打赏
  • 举报
回复
其实没得防的
要删除有何难?

DOS实模式下删除,一定OK!

http://lysoft.7u7.net
beyondtkl 2004-09-27
  • 打赏
  • 举报
回复
hook api.... then ok
Shikari 2004-09-27
  • 打赏
  • 举报
回复
这个问题可以利用WINDOWS提供的COM接口来做。
Windows提供ICopyHook,其中提供了一个函数:原形:function CopyCallback(Wnd: HWND; wFunc, wFlags: UINT; pszSrcFile: PAnsiChar;
dwSrcAttribs: DWORD; pszDestFile: PAnsiChar; dwDestAttribs: DWORD): UINT; stdcall;

function TCopyMain.CopyCallback(Wnd: HWND; wFunc, wFlags: UINT;
pszSrcFile: PAnsiChar; dwSrcAttribs: DWORD; pszDestFile: PAnsiChar;
dwDestAttribs: DWORD): UINT;
const
FO_COPY = 2;
FO_DELETE = 3;
FO_MOVE = 1;
FO_RENAME = 4;
begin
if wFunc = FO_DELETE then
Do something...
end;

做好in prodess并且注册以后,注销WINDOWS,然后重新启动,当你删除文件夹的时候就会自动进入你的程序。以上程序只能删除文件夹,对文件不管用。
文件可以另做,不过比较简单,可以用API以独占方式打开。
Dlwxn 2004-09-27
  • 打赏
  • 举报
回复
AQC (Another Qaility Code):
function ProtectFile(sFilename : string) : hFile;
var
hf: hFile;
lwHFileSize, lwFilesize: longword;
ofs : TOFStruct;
begin
if FileExists(sFilename) then
begin
hf := OpenFile(pchar(sFilename), ofs, OF_READ or OF_WRITE or OF_SHARE_EXCLUSIVE);
if hf <> 0 then
begin
lwFilesize := GetFileSize(hf, @lwHFileSize);
if LockFile(hf, 0, 0, lwFilesize, lwHFilesize) then
Result := hf else Result := 0;
end
else Result := 0;
end
else Result := 0;
end;

function UnProtectFile(hf: hFile): boolean;
begin
if hf <> 0 then
CloseHandle(hf);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
protectedFile := ProtectFile(ExtractFilePath(Application.Exename)+'test.txt');
if protectedFile = 0 then
MessageBox(Handle, 'Error locking file!', '', MB_OK or MB_ICONERROR) else
Button1.Enabled := False;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
plik: TextFile;
data: string;
begin
UnProtectFile(protectedFile);

AssignFile(plik, 'test.txt');
Reset(plik);
Read(plik, data);
CloseFile(plik);

protectedFile := ProtectFile(ExtractFilePath(Application.Exename)+'test.txt');
ShowMessage(data);
end;
l_xiaofeng 2004-09-27
  • 打赏
  • 举报
回复
獨佔式打開某文件,或某文件夾的某文件則無法刪除,其他的不會。
liufuyahong 2004-09-27
  • 打赏
  • 举报
回复
不是很清楚,UP

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧