【问题标题】:VB6 file append skipping linesVB6 文件追加跳行
【发布时间】: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 - 我没想过病毒软件。我们在使用其中一些软件时遇到了很多麻烦(我在看你卡巴斯基)。我会把它告诉客户。谢谢!
  • 我也想说反恶意软件。我已经多次看到这种类型的软件将我们的东西弄乱了,尽管不一定以你所看到的精确方式。但它解释了为什么事情会在很长一段时间后无缘无故停止工作。

标签: file vb6


【解决方案1】:

该代码的 sn-p 是否完整,或者您是否遗漏了检索下一个空闲文件号的行?

Dim nFileWrite As Integer

nFileWrite = FreeFile 'retrieve free file number

Open fnAddBkSlash(sReadFilePath) & sWriteFileName For Append As #nFileWrite
Print #nFileWrite, sLineContents
Close nFileWrite

只是想知道如果您在尝试写入该行之前没有专门检索新文件号,输出是否偶尔会丢失。

【讨论】:

  • 是的,对不起。我将它添加到代码 sn-p 中。它只是在代码的其他地方完成的,我把它省略了。我更新了 sn-p。
猜你喜欢
  • 1970-01-01
  • 2011-08-02
  • 1970-01-01
  • 2021-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-19
相关资源
最近更新 更多