【发布时间】:2020-05-29 14:04:04
【问题描述】:
自从 TRex 漫游地球以来,我就一直在编写 VB6 代码,但突然间,我们的一些客户开始遇到几十年来一直运行良好的应用程序的问题。
问题似乎是应用程序反复打开、附加和关闭文件时。我永远无法在我可以访问的任何机器上重现该错误。我有点猜到这是问题所在,并更改了程序以缓冲内容并立即将它们全部写入,客户的问题似乎得到了解决。
就在最近,我还遇到了一种情况,即跳过了行并打印了一行满是垃圾字符的行。就像旧时的 C 字符串缓冲区已分配但从未清除。
该代码没有什么特别的和标准的 VB6 文件访问代码。我的问题是两个部分。 1.这是否发生在其他人身上? 2. 如果有,你找出原因了吗?
我对原因的猜测是系统处于某种资源紧张状态,并且某些深层 C 代码无法正常运行。
代码如下:
Dim nFileWrite As Integer
nFileWrite = FreeFile
Open fnAddBkSlash(sReadFilePath) & sWriteFileName For Append As #nFileWrite
Print #nFileWrite, sLineContents
Close nFileWrite
【问题讨论】:
-
您是否尝试过为打开的文件添加写锁,以防出现访问争用情况? nFileWrite 的价值在哪里?我希望在某个地方有一个 FreeFile。
-
是的。有一个 freefile() 调用来设置值。对于那个很抱歉。我从未添加过写锁,我会调查一下。谢谢。
-
我已经追加了一些奇怪的东西。我最好的理论是病毒扫描程序在写入文件时锁定文件。最终,我开始只对文件进行一次完整的读取,并且每次都对文件进行一次完整的写入。如果我需要更复杂的,我会改用
For Random。对于基本的行追加,FileSystemObject 做得很好 -
Trevor - 我没想过病毒软件。我们在使用其中一些软件时遇到了很多麻烦(我在看你卡巴斯基)。我会把它告诉客户。谢谢!
-
我也想说反恶意软件。我已经多次看到这种类型的软件将我们的东西弄乱了,尽管不一定以你所看到的精确方式。但它解释了为什么事情会在很长一段时间后无缘无故停止工作。