Office中国论坛/Access中国论坛
标题: [求助]FSO来在程序中判断文件的各种信息的问题,急. [打印本页]
作者: xlonger 时间: 2006-4-15 19:29
标题: [求助]FSO来在程序中判断文件的各种信息的问题,急.
各位高手
我一直ACCESS帮助中介绍的FSO来在程序中判断文件的各种信息。下面是我用到的一些代码,是我自己根据帮助写的。这些函数和一些操作文件的代码一直运行的很好,包括windows 98 2000 xp 2003和office 2000,2002,2003的很多环境下。
可是最近在一台windows 2000 pro + office 2000机器上,我的程序运行时发现有问题了。当运行判断文件是否存在的时候,用了isFileExists函数,
'判断一个文件 是否存在
Public Function IsFileExists(strFilePath As String) As Boolean
Dim fs
Set fs = CreateObject("Scripting.FileSystemObject")
IsFileExists = fs.FileExists(strFilePath)
Set fs = Nothing
End Function
出错时,提示好象是,对象的with块属性没有设置。点击“调试”后,发现代码停在下面这行上,显示成黄色。
IsFileExists = fs.FileExists(strFilePath)
我在立即窗口中用这个函数判断一个文件时,也提示同样的出错。
但我在VBE中点击编译,没有提示出错。后来我在出错的机器上,即使又引用了Microsoft Scripting Runtime对象库,还是不行。
我想问一下,同样的代码在多数情况下都运行正常,在少数机器上有问题,是不是说明,主要的原因在特定的机器上。但我水平太低,实在想不出原因。如果实在发现不了原因,我想用其他代码来实现同样的功能试试。判断文件,文件夹是否存在,可以用len(dir())>0来实现,判断文件最后修改日期可以用filedatetime(),判断文件大小,和 '去除一个文本文件末尾的换行、回车,如果不用FSO 的话,我就不会了。您能帮我吗?我这个问题很急。谢谢。
'判断一个文件 是否存在
Public Function IsFileExists(strFilePath As String) As Boolean
Dim fs
Set fs = CreateObject("Scripting.FileSystemObject")
IsFileExists = fs.FileExists(strFilePath)
Set fs = Nothing
End Function
'判断文件最新修改日期和时间
Public Function FileLastModify(strFile As String) As Date
Dim fs, f
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFile(strFile)
FileLastModify = Format(f.DateLastModified, "yyyy-mm-dd hh:mm:ss")
Set fs = Nothing
Set f = Nothing
End Function
'判断文件大小
Public Function FileSize(strFile As String) As Integer
Dim fs, f
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFile(strFile)
FileSize = f.Size
Set fs = Nothing
Set f = Nothing
End Function
'判断一个文件夹 是否存在
Public Function IsFolderExists(strFolder As String) As Boolean
Dim fs
Set fs = CreateObject("Scripting.FileSystemObject")
IsFolderExists = fs.folderExists(strFolder)
Set fs = Nothing
End Function
'去除文件末尾的换行、回车
Const ForReading = 1, ForWriting = 2, ForAppending = 3
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
Dim fs, f, ts, s
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFile(Filename)
Set ts = f.openastextstream(ForReading, TristateUseDefault)
s = ts.Readall
ts.Close
If Asc(Right(s, 1)) = 10 And Asc(Right(s, 2)) = 13 Then
Dim Newlog As String
Newlog = Left(s, Len(s) - 2)
Set ts = f.openastextstream(ForWriting, TristateUseDefault)
ts.write Newlog
ts.Close
End If
作者: fan0217 时间: 2006-4-15 19:33
需要引用:Microsoft Scripting Runtime
同时检查:scrrun.dll文件是否存在或损坏.
[此贴子已经被作者于2006-4-15 11:35:44编辑过]
作者: fan0217 时间: 2006-4-15 19:40
对不起,我刚才看错了.
程序代码本身没有错,可以就是引用上面出现问题.这类函数最好加上错误处理,拦截错误.
[此贴子已经被作者于2006-4-15 11:49:32编辑过]
作者: fan0217 时间: 2006-4-15 19:58
声明时声明具体点,象这样
im objFS As FileSystemObject
作者: xlonger 时间: 2006-4-15 20:15
以下是引用fan0217在2006-4-15 11:40:00的发言:
对不起,我刚才看错了.
程序代码本身没有错,可以就是引用上面出现问题.这类函数最好加上错误处理,拦截错误.
非常感谢你的帮助。我的程序,即使在很多运行正常的机器上,我的这个程序都一直没有引用过Microsoft Scripting Runtime对象库.
当出现错误时,我在MDB文件中尝试引用了Microsoft Scripting Runtime对象库,试了一下好象还是不行.可能时间仓促,
在我电脑上,不论是否引用Microsoft Scripting Runtime对象库,运行都正常.真郁闷。
我使菜鸟,不知道,用FSO是否一定要引用Microsoft Scripting Runtime对象库,如果FSO访问文件有问题,还有其他办法访问文件吗?
判断文件,文件夹是否存在,可以用len(dir())>0来实现,
判断文件最后修改日期可以用filedatetime()
判断文件大小;引用一个文本文件,读取内容,处理后(就是我的程序中删除文本文件末尾的回车换行符)再写入文本文件,这2个功能,不用FSO 的话我就不会了,你们有其他方法吗?
作者: fan0217 时间: 2006-4-15 20:21
你参考一下这里呢?在读取的同时进行删除文件末尾的回车换行符操作.
http://www.office-cn.net/forum.php?mod=viewthread&tid=38005&replyID=&skin=1
作者: xlonger 时间: 2006-4-17 20:29
写贴子的时候,没有带上出错的描述记录,所以记得不是很清楚。
具体的错误信息是,
错误号91
描述,对象变量或WITH块变量未设置。
我在启动窗体的LOAD事件中,用到了判断文件是否存在的函数。
所以,实际的MDE程序运行时,ACCESS提示,在窗体的加载事件中,出现了上述错误,然后就显示我的程序主界面,因为接下来的操作,我都要先判断文件是否存在,然后读取磁盘上文件的数据,所以即使能点击其他功能,但都会提示出错。
后来,我将MDB文件拷贝到改机器上,按SHIFT键,打开数据库,运行启动窗体,出错时,点击调试,在vbe中发现是判断文件的函数出错。
经过昨天在我自己的电脑上,试验,我有了一些想法,我估计主要还是那台机器的原因,可能是scrrun.dll损坏(可能性很小,因为是新装的机器系统),更可能的是,scrrun.dll注册错误,就是别的软件用他自带的dll文件也注册了这个库。因为在我的电脑上,在VBE中,点击引用,找到scripting runtime ,发现对应的文件是c:\windows\system32\ufcomsql,通常情况下,应该是c:\windows\system32\scrrun.dll,我的电脑是win2003,安装了用友财务软件,v8.21。出错问题的机器上,也安装了用友财务软件,是最新的8.61,我估计很可能是这个原因。我准备拷贝一个别的机器上的win 2000pro的scrrun.dll,到该机器上,然后regsvr32.exe注册一下。试试。或者,将代码写成前期绑定,就是先引用,再试试。
作者: xlonger 时间: 2006-4-19 19:45
非常感谢。有多了一条路。
作者: xlonger 时间: 2006-4-24 16:49
原因终于找到了。谢谢大家。
欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) |
Powered by Discuz! X3.3 |