+ -
当前位置:首页 → 问答吧 → 请教:filelen 和 lof的用法以及 filenumber

请教:filelen 和 lof的用法以及 filenumber

时间:2008-03-26

来源:互联网

请教:

Filelen 可以用来获得打开文件的长度吗?

Lof 函数怎么用?几个已经打开的文件如何获得filenumber?

谢谢

http://www10.zzu.edu.cn/ie_wangjunfeng/daquan/function/contents/LOF.htm#deffilenumber

作者: wdwc   发布时间: 2008-03-26

请你参见Word自带的帮助文档。

比如:

FileLen 函数

      

返回一个 Long,代表一个文件的长度,单位是字节。

语法

FileLen(pathname)

必要的 pathname参数是用来指定一个文件名的字符串表达式。pathname 可以包含目录或文件夹、以及驱动器。

说明

当调用 FileLen 函数时,如果所指定的文件已经打开,则返回的值是这个文件在打开前的大小。

注意 若要取得一个打开文件的长度大小,使用 LOF 函数。

FileLen 函数示例

本示例使用 FileLen 来返回文件的字节长度。示例中假设 TESTFILE 为含有数据的文件。

Dim MySizeMySize = FileLen("TESTFILE")Filelen("TESTFILE")' 返回文件的字节长度。

作者: Excel.Home   发布时间: 2008-03-26

谢谢关注

filelen好像是在文件关闭时有效

当已经打开的文档用filelen好像不行啊

而lof函数要获得打开时的文件号,可是对于不断写入内容的并且保持打开状态的文件该如何获得这个文件号呢?用什么属性一类的吗?

作者: wdwc   发布时间: 2008-03-26

请参考:

'* +++++++++++++++++++++++++++++
'* Created By SHOUROU@ExcelHome 2008-3-26 18:02:20
'仅测试于System: Windows NT Word: 11.0 Language: 2052
'№ 0374^The Code CopyIn [ThisDocument-ThisDocument]^'
'* -----------------------------
Option Explicit
Sub Example()
    Dim strFileName As String, I As Byte
    strFileName = "F:\Test"
    For I = 1 To 3
        Open strFileName & I For Output As #I   ' 打开文件,如果没有,将创建此文件
        Select Case I
        Case 1
            Print #I, "Microsoft Word" & Timer    ' 将字符串写入文件
        Case 2
            Print #I, "ExcelHome" & Timer
        Case 3
            Print #I, "This is a test." & Timer
        End Select
        Debug.Print strFileName & "文件长度:" & LOF(I)
    Next
    Close #3
    Close #2
    Close #1
    'Close '可使用Close语句全部关闭
    '对于关闭文件,使用FileLen函数
    For I = 1 To 3
        Debug.Print strFileName & I & "文件长度:" & FileLen(strFileName & I)
    Next
End Sub
'----------------------

作者: 守柔   发布时间: 2008-03-26

另外,我不知道楼主是指打开的其它文件吗?如果未保存(在内存中)恐怕比较难以做到。

我上述的代码是指二进制文件。

对于任意格式的文件,可以使用File对象的Size属性返回已知文件的大小。

作者: 守柔   发布时间: 2008-03-26

谢谢版主,我先试一下

作者: wdwc   发布时间: 2008-03-26

我的目的是这样的:

我有一批文件,放在一个统一的文件夹内。通过filesearch打开文件,从其中复制出一部分,新建一个文件,保存为01.doc,粘贴,判断01.doc的长度,如果小于1M则继续,大于1M则关闭,新建文件存为02.doc再从待处理文件中继续粘贴,大于1M则新建03.doc。一直到所有文件处理完。

我原先用filelen,这样就得关闭01.doc,判断大小,然后打开,粘贴,关闭,再判断。这样比较慢。于是我想保持01.doc打开,用activate,可能快一点。

但是filelen只能获得打开前文件的大小,而lof用于用open语句打开的文件,需要filenumber,而我这个01.doc不是由open得来的,所以比较麻烦。

版主看有办法吗?实在不行新建——保存——关闭——打开——lof如何?变通一下?

作者: wdwc   发布时间: 2008-03-26

QUOTE:
以下是引用wdwc在2008-3-26 18:27:32的发言:

我的目的是这样的:

我有一批文件,放在一个统一的文件夹内。通过filesearch打开文件,从其中复制出一部分,新建一个文件,保存为01.doc,粘贴,判断01.doc的长度,如果小于1M则继续,大于1M则关闭,新建文件存为02.doc再从待处理文件中继续粘贴,大于1M则新建03.doc。一直到所有文件处理完。

我原先用filelen,这样就得关闭01.doc,判断大小,然后打开,粘贴,关闭,再判断。这样比较慢。于是我想保持01.doc打开,用activate,可能快一点。

但是filelen只能获得打开前文件的大小,而lof用于用open语句打开的文件,需要filenumber,而我这个01.doc不是由open得来的,所以比较麻烦。

版主看有办法吗?实在不行新建——保存——关闭——打开——lof如何?变通一下?

提供两种方法:

Sub Example()
    Dim FSO As Object, myFile As Object, FileFullName As String
    FileFullName = "F:\MyOffice\MyWord\Example.doc"
    Set FSO = CreateObject("Scripting.FileSystemObject")
    '无论文件是否打开
    Set myFile = FSO.GetFile(FileFullName)
    MsgBox myFile.Size 'byte
End Sub

Sub Example2()
    Dim myDoc As Document, FileFullName As String
    FileFullName = "F:\MyOffice\MyWord\Example.doc"
    Set myDoc = Word.Documents.Open(FileName:=FileFullName, Visible:=False)
    With myDoc
        MsgBox .BuiltInDocumentProperties(wdPropertyBytes)
        .Close False
    End With
End Sub

根据你的情况,可以使用方法2(因你本身在打开文档),注意,每次粘贴后,保存文档,以取得更新后的磁盘文件大小.

作者: 守柔   发布时间: 2008-03-27

问题解决,又学一招,谢谢版主

第一个办法还得好好学习一下

作者: wdwc   发布时间: 2008-03-27

学习一下。

作者: maxlt   发布时间: 2010-12-15