ForWriting 和 ForAppending VBS 的区别

Difference between ForWriting and ForAppending VBS

我有以下生成数组并将其写入文本文件的代码。

当我使用ForAppending 模式打开文件时,它会在60 秒内写入文件。

当我使用ForWriting 模式时,它写得很慢。

谁能解释为什么 ForAppending 模式比 ForWriting 快得多?

谢谢。

Dim objFSO, objTextFile
Dim strFile
strFile = "U:\Summers.txt"

Set objFSO =     CreateObject("Scripting.FileSystemObject")

' ForAppending = 8 ForReading = 1,     ForWriting = 2

Const ForAppending = 8

Set objTextFile = objFSO.OpenTextFile _
(strFile, ForAppending, True)


imax = 10000000


a = array()
t0 = timer 'Standard array
Redim a(imax)

For i = 0 To imax

 a(i) = strline

Next

msgbox "Array ready."

for i = 0 to ubound(a)

objTextFile.WriteLine(a(i) & vbCrLf)
next

objTextFile.Close

s = s & "[Array " &     FormatNumber(timer - t0, 3, -1) & "]" & vbCRLF



Set a = Nothing

MsgBox s

我猜是因为 ForWriting 打开一个文件并覆盖它的内容,而 ForAppending 只是写入文件的末尾,而没有覆盖。

ForWriting 覆盖现有文件,而 ForAppending 只是将内容添加到末尾。如果你在每个运行之前手动删除文件,那个时间差就很奇怪了。我想知道覆盖是否可能在每次 WriteLine 调用时发生,这里的文档不是很具体。

但是,由于有很多 WriteLine 调用,两者都有相当大的开销。您可以在 RAM 中连接字符串,并且只执行一次 Write() 以获得性能。或者甚至使用 ADODB.Stream 对象。这对于 Unicode 文件也更可靠。