当前位置:编程学习 > VB >>

dir后 另一个程序正在使用此文件

我在用dir()函数做递归历遍目录树后,对查找的项目进行更名、删除或其它操作,提示“另一个程序正在使用此库文件,进程无法访问”。
在进行操作时使用cmd /c 完成的,已经确定cmd绝对已经关闭。
目前考虑可能是dir历遍时占用的进程 ,我试着使用dir("")或dir(改变盘符)的方式释放占用,结果不行,请教使用dir后如何释放占用? --------------------编程问答-------------------- 经过测试,确实是使用dir函数造成的进程占用,如何解除,请指教 --------------------编程问答-------------------- 那就别dir,使用ms scripting running库的文件对象操作 --------------------编程问答-------------------- 使用FileSystemObject对象,有些文件、文件夹名它认不出来,有畸形名 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 请大家给个解决方法 --------------------编程问答-------------------- 我没有发现过这种情况。我还常用 If Dir(strFile) > "" Then Kill strFile 这样的语句。
--------------------编程问答-------------------- shell "dir /b /a-d c:\\*.* >d:\\allfiles.txt",vbHide
'读文件d:\\allfiles.txt的内容即C:\\下所有文件的名字
shell "dir /b /ad  c:\\*.* >d:\\alldirs.txt",vbHide
'读文件d:\\alldirs.txt的内容即C:\\下所有子目录的名字
请记住,能用shell命令获取文件、文件夹信息或者操作文件、文件夹最好用shell命令获取或者操作,而不要用各种API获取或者操作,因为当遇到非法文件夹名或非法文件名或非法文件长度、非法文件日期、压缩文件、链接文件、稀疏文件……等各种意料之外的情况时,API会处理的不全面或陷入死循环,而shell命令不会。
--------------------编程问答--------------------
引用 6 楼 of123 的回复:
我没有发现过这种情况。我还常用 If Dir(strFile) > "" Then Kill strFile 这样的语句。

这种情况也是我常用的一种方法,是不会出现我说的占用情况的。
我是用dir()函数做历遍指定整个目录树后,对历遍出来的某个文件或目录进行删除或更名时,经常出现“另一个程序正在使用此文件,进程无法访问”情况。


引用 7 楼 zhao4zhong1 的回复:
shell "dir /b /a-d c:\\*.* >d:\\allfiles.txt",vbHide
'读文件d:\\allfiles.txt的内容即C:\\下所有文件的名字
shell "dir /b /ad  c:\\*.* >d:\\alldirs.txt",vbHide
'读文件d:\\alldirs.txt的内容即C:\\下所有子目录的名字
请记住,能用shell命令获取文件、文件夹信息或者操作文件、文件夹最好用shell命令获取或者操作,而不要用各种API获取或者操作,因为当遇到非法文件夹名或非法文件名或非法文件长度、非法文件日期、压缩文件、链接文件、稀疏文件……等各种意料之外的情况时,API会处理的不全面或陷入死循环,而shell命令不会。

七楼:你这种方法只能历遍合法文件名,对畸形文件或目录名是无法历遍出来的。
同样使用FileSystemObject对象,对畸形名也是无法历遍出来的。
 我试过多种方法,发现只有使用dir()函数才能解决历遍畸形名的问题。  --------------------编程问答-------------------- 试试,将你的遍历过程与写磁盘操作分开来。

遍历时,仅记录你需要操作的文件路径。

遍历完成后(退出了所有重入的迭代),再根据记录进行文件操作。 --------------------编程问答--------------------
引用 9 楼 of123 的回复:
试试,将你的遍历过程与写磁盘操作分开来。

遍历时,仅记录你需要操作的文件路径。

遍历完成后(退出了所有重入的迭代),再根据记录进行文件操作。

我就是在历遍时,只记录到数组的,然后再进行其它操作,历遍和操作是分开做的,结果操作时会提示“进程无法访问”,也就量说前面dir()历遍肯定还在使用进程,现在就是想寻求如果退出前面dir()的历遍进程或结束前面dir()的历遍占用
补充:VB ,  基础类
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,