应该是很简单的两个问题,呵呵 (200分)

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

CJ

Unregistered / Unconfirmed
GUEST, unregistred user!
MICROSOFT WIN2000下用的<br>//这个函数是抄来的,我看看应该没什么错吧?<br>procedure DelTree(Path:String);<br>&nbsp; Var<br>&nbsp; &nbsp;Found:Integer;<br>&nbsp; &nbsp;SearchRec:TSearchRec;<br>&nbsp; begin<br>&nbsp; &nbsp; Found := FindFirst(path+'*.*', $0000003F, SearchRec);<br>&nbsp; &nbsp; While Found = 0 Do<br>&nbsp; &nbsp; Begin<br>&nbsp; &nbsp; &nbsp; If ((SearchRec.Name&lt;&gt;'.') &nbsp;And (SearchRec.Name&lt;&gt;'..') )Then<br>&nbsp; &nbsp; &nbsp; Begin<br>&nbsp; &nbsp; &nbsp; &nbsp; If (SearchRec.Attr = $00000010) Then<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DelTree(Path+SearchRec.Name+'/')<br>&nbsp; &nbsp; &nbsp; &nbsp; Else<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DeleteFile(Path+SearchRec.Name);<br>&nbsp; &nbsp; &nbsp; End;<br>&nbsp; &nbsp; &nbsp; Found := FindNext(SearchRec);<br>&nbsp; &nbsp; End;<br>&nbsp; &nbsp; FindClose(SearchRec);<br>&nbsp; &nbsp; try<br>&nbsp; &nbsp; &nbsp; RmDir(Path); //到最上层的时候,主目录就是删不掉! IO ERROR<br>&nbsp; &nbsp; except<br>&nbsp; &nbsp; <br>&nbsp; &nbsp; end;<br>&nbsp; End;<br><br>然后我光火,这么来:<br>&nbsp; DelTree(dirname);<br>&nbsp; rmdir(dirname);<br>再次发生异常IO ERROR<br><br><br>还有妖怪问题<br>HKEY_CLASSES_ROOT/*/Shell/myproductname<br>HKEY_CLASSES_ROOT/*/Shell/myproductname/command<br>设置了相应值,右键菜单用的挺红火,可是,当这个文件没有默认打开方式时,双吉竟然用了我的程序,我不想这样。本来用SHELLAPI应该该可以搞定,可问题是我要在所有文件、目录都有那么个东西,没办法,直接搞注册表。
 
呵呵,CJ老大都搞不定的东东,偶看怕是很难哦
 
1、老大,我试了没问题啊!<br>&nbsp; &nbsp;可能是你调用的问题吧?<br>&nbsp; &nbsp;我是这样调的:<br>&nbsp; &nbsp;Deltree('C:/Test/');<br>&nbsp; &nbsp;目录(含其的文件和子目录)全部删除成功。<br>2、老大的程序应该与那些文件关联啊?以至要与通用的文件关联?<br>&nbsp; &nbsp;拜托说清楚嘛!<br><br>补充:我也是win2k!
 
不要迷信权威嘛。
 
老大帮我看看这个——<br>http://www.delphibbs.com/delphibbs/dispq.asp?lid=695113
 
第一个问题,我这里执行通过,D6+Win2kAS<br>第二个问题,好象在所有版本的WINDOWS下都是这样的,会自动找到第一个作默认值的。<br>你可以采用shellex的方式
 
1.我看程序是没问题,调试发现删到最上层目录就IO错,我倒,启动98就没问题,实在搞不定;2K+D5<br>2.我不想注册到注册表SHELLEX里,太麻烦,要注册GUID之类的,破坏环境嘛...呵呵,出于某中原因,我需要所有的文件关联。所以这里用了*<br>别叫我老大+权威,没的事,很久没用DELPHI了,呵呵
 
我想可能是删除的目录有权限设置吧?<br>是每一个目录都这样吗?<br>由于我无法再现这个错误,只能猜了!<br><br>
 
偶的机器破,装2K的话怕会死得很难看的[:(]
 
cj同志:<br>&nbsp; 你好,我拿了你的程序试了试,我调用deltree('c:/test');并在RmDir(Path); <br>&nbsp; 这句上设了一个断点,可我发现此时的path='c:testtest'.我的环境跟你一样2ks+d5.<br>另,我还有一个待答问题,有空过去看看,hehe,也怪.<br><br>
 
偶也试过deltree('c:/test');,发现没出现楼上同志的问题呀 ,不过偶是2k+d6,呵呵
 
1.sonie,阿,你终于也碰到我的问题拉,不是我胡说吧?呵呵,我明天再查;<br>2.没人搞的定这个别告诉我,难道还的我用shellex?
 
1&gt;最后的RmDir(Path); 前加入ChDir('..');试试!我这没有WIN2K,只好猜猜!<br>2&gt;“馊主意”:你可以改一下注册表里文件的关联,对于没有默认打开方式的文件都和Notepad关联即可!
 
1、<br>不能用 If (SearchRec.Attr = $00000010) Then 来判断是否目录<br>应该用 If (SearchRec.Attr and $00000010)&lt;&gt; 0 Then<br>就是判断那一位,因为目录也有只读、隐藏之类属性的嘛,那么这样的目录就不是$00000010了<br>2、<br>如果你用了openfile、savefile dialog之类的,你要设置不改变当前目录的选项,<br>否则程序的当前工作目录在这里,你是删不掉的,谁也删不掉
 
第一个问题,我这里执行通过,D6+Win2000 S<br>第二个问题,也没办法。
 
问题1搞定:YB_unique的是正解;<br>pipi的问题我考虑过,由于在这个里面我还用函数作其他一些事情(包括把属性设置成<br>normal)所以,懒得改抄来的这段代码了。<br><br>问题2继续,难道只好用shellex?
 
我的1、2都是讲的第一个问题
 
[green]回答问题2:瘟氏兄弟设置的障阻吧,[8D][/green]
 
后退
顶部