这个让我发疯。欢迎任何帮助。
我有一个不断写入文本文件的数字模拟器。文件大小不断增加。我需要报告文件大小并检查它是否仍在增加或是否已停止增加。
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
感谢您的时间。
答案 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