VBA – Excel无法增加文件大小

这个让我疯狂。 任何帮助是受欢迎的。

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

VBA似乎无法检测到文件的增加的大小,它保持注册相同的大小。 但是,如果我有文件夹中的Windows资源pipe理器操作,并按F5,在VBA中的大小增加。

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

我已经使用filelen()filesystemobject.filezise()datelastmodified()datelastacessed()和没有…

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

对不起,如果不是很清楚。 如果有必要,我会很乐意进一步澄清。

这里是我一直在使用的代码,但要testing它,你将不得不模仿文件的写作情况,如在video编码,例如,因为如果你用记事本编辑的文本文件,它的行为也更新信息到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 

感谢您的时间。

也许这是这个问题: 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