设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 864|回复: 8
打印 上一主题 下一主题

[Access本身] [求助]FSO来在程序中判断文件的各种信息的问题,急.

[复制链接]
跳转到指定楼层
1#
发表于 2006-4-15 19:29:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位高手

我一直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
   
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2006-4-15 19:33:00 | 只看该作者
需要引用:Microsoft Scripting Runtime



同时检查:scrrun.dll文件是否存在或损坏.

[此贴子已经被作者于2006-4-15 11:35:44编辑过]

3#
发表于 2006-4-15 19:40:00 | 只看该作者
对不起,我刚才看错了.

程序代码本身没有错,可以就是引用上面出现问题.这类函数最好加上错误处理,拦截错误.



[此贴子已经被作者于2006-4-15 11:49:32编辑过]

4#
发表于 2006-4-15 19:58:00 | 只看该作者
声明时声明具体点,象这样im objFS As FileSystemObject
5#
 楼主| 发表于 2006-4-15 20:15:00 | 只看该作者
以下是引用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 的话我就不会了,你们有其他方法吗?





6#
发表于 2006-4-15 20:21:00 | 只看该作者
你参考一下这里呢?在读取的同时进行删除文件末尾的回车换行符操作.

http://www.office-cn.net/forum.php?mod=viewthread&tid=38005&replyID=&skin=1
7#
 楼主| 发表于 2006-4-17 20:29:00 | 只看该作者
写贴子的时候,没有带上出错的描述记录,所以记得不是很清楚。



具体的错误信息是,

错误号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注册一下。试试。或者,将代码写成前期绑定,就是先引用,再试试。
8#
 楼主| 发表于 2006-4-19 19:45:00 | 只看该作者
以下是引用fan0217在2006-4-15 12:21:00的发言:


你参考一下这里呢?在读取的同时进行删除文件末尾的回车换行符操作.

http://www.office-cn.net/forum.php?mod=viewthread&tid=38005&replyID=&skin=1

非常感谢。有多了一条路。
9#
 楼主| 发表于 2006-4-24 16:49:00 | 只看该作者
原因终于找到了。谢谢大家。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-15 09:21 , Processed in 0.091474 second(s), 32 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表