VBA - Excel无法取消文件大小增加

时间:2017-11-07 22:40:16

标签: excel vba excel-vba filesize filesystemobject

这个让我发疯。欢迎任何帮助。

我有一个不断写入文本文件的数字模拟器。文件大小不断增加。我需要报告文件大小并检查它是否仍在增加或是否已停止增加。

VBA似乎无法检测到文件增加的大小,它会保持注册相同的大小。但是,如果我在文件夹上选择了Windows资源管理器并按F5,则VBA的大小会增加。

我需要知道它是否应该以这种方式工作,因为Windows如何索引文件或者我做错了什么。

我使用了filelen()filesystemobject.filezise()datelastmodified()datelastacessed()而且没有...

我已经找到了一个workarround:如果我将有问题的文件复制到临时文件然后读取临时文件大小,我可以检测到大小的变化。但这是一个丑陋的解决方案。我非常想检查文件大小并获得正确的结果。

很抱歉,如果不是很清楚。如果有必要,我将很乐意进一步澄清。

这是我一直在使用的代码,但是为了测试它你必须模仿文件写入情况,例如在视频编码中,因为如果你使用在记事本中编辑的文本文件来执行它,那么保存它也会将信息更新为vba。

Public fileSizeLastStep as long

Public Sub sizeWatch()
    dim fso as new fileSystemObject
    dim fileToMeasure as File
    dim fileSizeNow as long

    Set fileToMeasure = fso.GetFile("C:\filename.txt")
    fileSizeNow = fileToMeasure.Size

    If fileSizeNow <> fileSizeLastStep Then
        fileSizeLastStep = fileSizeNow
        Set fso = Nothing
        Call Application.OnTime(Now + TimeValue("00:02:00"), "sizeWatch")
    Else
        MsgBox "Simulation Finished!"
        'calls whathever function that starts next simulation
    End If
End Sub

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

也许这是一个问题: https://blogs.msdn.microsoft.com/oldnewthing/20111226-00/?p=8813

引用文章:

  

如果你现在真的需要实际文件大小,你可以做什么   第一个客户做了并调用了GetFileSize。该功能运作   在实际文件而不是目录条目上,所以它变得真实   信息而不是影子副本。请注意,如果文件存在   连续写入,然后你得到的价值已经错了   你收到它的那一刻。

所以请尝试使用GetFileSize。

 Declare Function GetFileSize Lib "kernel32.dll" (ByVal hFile As Long, lpFileSizeHigh As Long) As Long