![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-17 10:33 |
共 47,813 主题排行 / 349,904 发帖 / 今日 1 篇 / 48,259 会员排行 |
| DOS疑难解答 & 问题讨论 (解答室) » 删除文件 |
| 可打印版本 1,983 / 24 |
| 第16楼 willsort | 发表于 2005-08-13 22:36 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
Re fdsiuha:
对你提供测试示例表示感谢,是我孤陋寡闻了。 目前为止,我在Win98的命令行下可以完成以上测试,包括rd .的测试。但是在Win98的DOS模式下,此测试仍然无法通过。这似乎说明,这是某种Windows的机制在起作用(可能与进程间的消息传递方式有关),而非你所说的DOS的环境变量管理的疏漏。 而且,我也不倾向将当前目录看作环境变量,因为它毕竟不在环境变量空间保存,无论是公共空间,还是每个DOS窗口自己的私有空间,除非将它看作一种广义上的“环境变量”。但是因为我尚未得知这个当前目录的具体保存位置,所以无法作出更准确的判断。 你知道得更多吗? [ Last edited by willsort on 2005-8-14 at 07:15 ] |
|
| 第17楼 fdsiuha | 发表于 2005-08-14 00:40 |
| 高级用户 发帖 302 积分 587 | |
|
当然 当前目录作为整个DOS系统的参数是不用具体提供给某个程序,但应该在PSP中间引用。但是具体位置尚不知晓,实际上这个比提供给程序的环境变量要低级,一般不需要特别应用,我用C从来就没有碰到过要使用这个的必要(汗)。我努力在网找一下,看看有没有外文的资料。
另外你说的在完全的DOS环境下不能使用,我还在找原因..。 [ Last edited by fdsiuha on 2005-8-14 at 00:41 ] |
|
| 第18楼 fdsiuha | 发表于 2005-08-14 01:07 |
| 高级用户 发帖 302 积分 587 | |
|
转洪恩的网页,注意CDS项
你想详细了解你的设备驱动程序吗? 以下引自一个病毒编写技术文章 %DIB(DOS Info Block DOS信息模块)% 另外,我试图看一下这个中断究竟是怎样工作的。 还有就是纯DOS7.1确实不能这样应用,我怀疑是不是WIN的与DOS不一样,WINNT内核没有办法试,那位GG现在装了DOS7.1+WIN3.2,帮忙试一试,大家一起来探个究竟。 [ Last edited by fdsiuha on 2005-8-14 at 01:23 ] |
|
| 第19楼 fdsiuha | 发表于 2005-08-14 01:32 |
| 高级用户 发帖 302 积分 587 | |
|
另外DOS提供了另外的一个47h的中断可以正常使用。我困死了,今天先到这里吧.
用DEBUG测试,在删掉当前目录的时候47号功能依然返回的是删除以前的目录。 就是说,当前目录没有发生任何变化。只是不存在了。 单步跟踪47号功能,发现依然是查CDS表,跟踪到的内存地址与52号功能返回地址相同。 另外,再删掉当前目录后马上使用EDIT打开文件会提示目录有问题。估计也是因为使用了这个中断,要按照这个结果搜索当前目录文件的时候自然会发生的问题。 真是搞不懂WIN在干什么,另外有没有人在DOS7.1+WIN3.2做过实验? [ Last edited by fdsiuha on 2005-8-14 at 11:13 ] |
|
| 第20楼 willsort | 发表于 2005-08-14 11:40 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
Re fdsiuda:
我搜索了Win98下所有的command.com,均能找到“Attempt to remove...”这个错误信息字符串。也就是说,无论实际测试结果如何,Win98的原意都并非是将删除当前目录的权限开放,这从另一个侧面佐证了 Climbing 兄关于它是个 BUG 的猜测。这也进一步验证了Win98的“粗放型特征”。至于DOS7+Win3,我没有平台可以验证,但我猜测它的“开放性”并没有如此高。 关于这个问题的成因,我有两个猜测:第一,Win98的进程管理中将删除当前目录的消息过于落后地传递给其它进程,直到进程开始访问当前目录时,这个消息才被动地被执行或者传递;第二个,可能是它不完善的硬盘缓冲机制在起作用,也就是说,删除当前目录的实际操作是在再次访问当前目录之前才被执行的。 但以上的两点推测,都无法说明为什么"Attempt to remove..."为什么被抛弃不用。 |
|
| 第21楼 fdsiuha | 发表于 2005-08-14 13:28 |
| 高级用户 发帖 302 积分 587 | |
|
我还是不觉得是个问题,而且觉得应该不会是进程间的原因。每一个DOS窗口都有自己的COMMAND.com的所有特征信息,但是仍然公用基本的DOS系统IO.SYS。这个系统变量只在同一个DOS窗口里面有效。COMMAND.com在启动的时候确实从系统得到当前的目录信息,但是只得到了一个COPY,而不是整个系统的该信息的内存地址类似C语言的传值,而不是给出一个指针,指向系统变量,因为这个是受保护的。
所以纯DOS下绝对不能非法改变这个值,因为这是一个系统级的。但是在WIN98下的DOS窗口是个独立于系统外的,同时也获得了一个系统变量的COPY。当然这个COPY数据是可以自由变化的,我使用DEBUG验证确实每一个DOS窗口都有自己的CDS。 所以我希望能够WIN3.x尝试一下,如果WIN3.x的DOS窗口下与WIN9X一样,那么说明WIN9x允许这样使用,实际是扩展了DOS的功能,而不是一个BUG。 另外DOS6.X+WIN3.X也可以试一下,也可能可以成功。 |
|
| 第22楼 willsort | 发表于 2005-08-14 18:56 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
Re fdsiuha:
刚才在Virtual PC 5 的 MS-DOS7.1 环境安装了 Windows3.2 简体中文版,在其“ MS-DOS 方式”下进行了测试,结果确认了我的猜测。
|
|
| 第23楼 fdsiuha | 发表于 2005-08-14 20:36 |
| 高级用户 发帖 302 积分 587 | |
|
第二个命令是否COPY的时候COPY错了?
第三种命令其实在WIN的DOS窗口也是不能实现的。不能删除父目录,只能删除当前目录 RD . [ Last edited by fdsiuha on 2005-8-14 at 20:59 ] |
|
| 第24楼 willsort | 发表于 2005-08-14 20:41 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
Re fdsiuha:
拷贝过程我一字未易,不知你所说的错误是指非“rd .”吗?我是根据你之前的示例做的测试。当然,我也尝试过 rd . / rd ..\a,也是同样的错误提示。 赏屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯突 [ Last edited by willsort on 2005-8-14 at 20:45 ] |
|
| 第25楼 fdsiuha | 发表于 2005-08-14 21:06 |
| 高级用户 发帖 302 积分 587 | |
|
对不起,是我看错了。这么说确实WIN98在这个地方有问题。我在WINME下试过了,但是还是出现与WIN98同样的情况,我很想知道到底是什么原因造成这种情况,好象还没有E文文献记载这个事情。
DOS一直强调不能删除当前目录,然而WIN9X下却破坏了这个规矩,不知道究竟是何道理。 [ Last edited by fdsiuha on 2005-8-14 at 21:49 ] |
|
| 上一页 1 2 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |