怎样让文件夹只能是只读的?(50分)

  • 主题发起人 主题发起人 datoncg
  • 开始时间 开始时间
D

datoncg

Unregistered / Unconfirmed
GUEST, unregistred user!
怎样让文件夹只能是只读的?要编程实现,当有这么一个程序要将文件夹FILE的只读<br>属性改为非只读的,要往里面写文件,要怎样编程实现不让这个程序更改这个文件<br>夹的属性,让他往里头写不成文件!
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=782328<br><br>问题:如何设置文件夹的属性? ( 积分:50, 回复:4, 阅读:23 )<br>分类:系统相关 ( 版主:luyear, zyy04 ) &nbsp;<br>来自:ufo!, 时间:2001-12-12 14:07:00, ID:782328 [显示:小字体 | 大字体] &nbsp;<br>我想把一个文件夹属性设成系统,只读的,请问用什么函数?<br>&nbsp;<br>&nbsp;<br>来自:刘永学, 时间:2001-12-12 20:36:00, ID:783414 <br>用FileSetAttr函数,文件夹和文件一样,<br>FileSetAttr('C:/arcgis', faReadOnly or faSysFile);<br>获取其属性用FileGetAttr函数<br>Attrs := FileGetAttr('MyFile.sys');<br>&nbsp;<br>
 
我的主要意思是怎样不让别的程序来改,或者一要改就知道!
 
是否可以通过一个钩子来做?不管如何做,必须调用FileSetAttr,做一个自已的函数,替换它,<br>在遇到调用时,检查参数即可
 
对于这种情况有这样一种解法,如果不详细的地方,可以去查一查windows SDK,大概思路是:<br>用HANDLE FindFirstChangeNotification(<br>&nbsp; &nbsp; LPCTSTR lpPathName, // 指向要监视的目录字符串<br>&nbsp; &nbsp; BOOL bWatchSubtree, // 监视不监视子目录 &nbsp;<br>&nbsp; &nbsp; DWORD dwNotifyFilter // 监视的条件 <br>&nbsp; &nbsp;);<br>该函数返回一个句柄;利用这个句柄传递给一个等待集函数,如:<br>DWORD WaitForSingleObjectEx(<br>&nbsp; &nbsp; HANDLE hHandle, // 可以就是刚才返回的句柄; <br>&nbsp; &nbsp; DWORD dwMilliseconds, // 等待多少毫秒间隔;<br>&nbsp; &nbsp; BOOL bAlertable // 如果为真就会执行I/O例程;<br>&nbsp; &nbsp;);<br>你可以把waitforsingleobjectex()函数放在一个线程里,这样一来,如果被监视的目录发生改变,WINDOWS就会唤醒waitforsingleobjectex()所在的那个线程,从而你就得当了系统的控制权!在处理你想做的事情。<br>监视条件有:<br>FILE_NOTIFY_CHANGE_FILE_NAME:目录中的文件或子目录的名字发生变化,如:重命名,创建,或者删除;<br>FILE_NOTIFY_CHANGE_DIR_NAME:目录中的文件或子目录发生变化,如创建删除目录;<br>FILE_NOTIFY_CHANGE_ATTRIBUTES:。。。的属性发生变化;<br>FILE_NOTIFY_CHANGE_SIZE:。。。的大小发生变化时,发出通知;<br>FILE_NOTIFY_CHANGE_LAST_WRITE:。。。最后一次修改时间发生变化时发出通知;<br>FILE_NOTIFY_CHANGE_SECURITY:。。。的权限和安全描述发生变化时发出通知;<br>如果FindFirstChangeNotification()失败,则返回值为:INVALID_HANDLE_VALUE;<br>其中waitforsingleobjectex()中的dwmilliseconds 很有意义:<br>如果不为零和INFINITE,此等待函数就到dwmilliseconds 后返回,即使等待的对象没有出现;<br>如果为零:waitforsingleobjectex()就立即检查等待的对象是否发生或出现,并立即返回;<br>如果为 INFINITE:则这个等待函数一直等待监视的对象;
 
后退
顶部