文件存在测试
摘自:<<Visual Basic 5.0 核心技术 >>
作者:Bruce Mckinney
测试一个文件的存在应该是很容易的(并且在多数语言中确是如此),但在VisualBasic中,它却成为最令人头痛的问题之一,别指望像这样就能简单地解决了:
fExist = (Dir$(sFullPath)< > sEmpty)
那条语句会一直工作到你在一个空软盘或CD-ROM驱动器上指定一个文件为止。然后,你就会被一个消息框困住。
这里是另一种常见的情况:
fExist = FileLen (sFullPath)
对于0长度文件它就会失败,尽管0长度文件不常见,却也不是闻所未闻。
我的理论是,在Basic中检验文件存在的唯一可靠方法(无需利用API调用)是使用错误陷阱。我曾挑战过许多Visual Basic程序员给我一种可选方法,但直今没有好消息。这里是我所知道的最简洁的方法:
Function ExistFile(sSpec As String) As Boolean
On Error Resume Next
Call FileLen(sSpec)
ExistFile=(Err=0)
End Function
这不可能有很高的效率。错误陷阱对非失败情况是快速的,但是这个函数更像是恨不得没有错误。或许你会发送给我一个不带错误陷阱的、纯Basic的ExistFile函数。到那时,这就成为API的可选方法。
Function ExistFileDir(sSpec As String) As Boolean
Dim af As Long
af = GetFileAttributes(sSpec)
ExistFileDir=(af<>-1)
End Function
我曾认为没有什么可以打破这一个,但事实证明某些含有控制字符的文件名在Windows 95中是合法的,而在Windows NT中则是非法的,或者这是另一条解决方法?不管怎样,我已见过这个函数失败的情形,在这里难以描述。我讨厌把脑细胞浪费在如此细琐的函数上。但99%的有效存在测试对含有上千个文件的磁盘来说还不够好。