[英]VBScript/Classic ASP permission denied with fso.OpenTextFile after several uses
我有一個過程,該過程循環遍歷大量數據(1MB),將其存儲在陣列中,然后定期將其寫入磁盤。 經過幾次迭代后,腳本在我的else部分的fso.OpenTextFile()處失敗,好像該文件自上次調用該函數以來尚未關閉或尚未完成關閉。 迭代#似乎並不具體,因為據我所知,它發生在第2次和第10次迭代之間的任何地方。 該文件實際上是創建並附加到的,因此它似乎不是權限問題。 我正在考慮給流程增加時間延遲,但不想一定要為已經很長的流程增加開銷。
作業系統:Windows 2012 R2
任何想法或建議表示贊賞。
'Write array to disk
sub writeFile()
'on error resumenext
set fso = Server.CreateObject("Scripting.FileSystemObject")
if needToCreateFile then
set objTextFile = fso.CreateTextFile(server.mappath("google/linklist.html"),true)
objTextFile.writeLine("<!DOCTYPE html>")
objTextFile.writeLine("<html>")
objTextFile.writeLine("<title>")
objTextFile.writeLine("Content Listing")
objTextFile.writeLine("</title>")
needToCreateFile = false
else
' OpenTextFile Method needs a Const value
' ForAppending = 8 ForReading = 1, ForWriting = 2
Set objTextFile = fso.OpenTextFile (filename, ForAppending, True)
end if
'Write contents of array to file
for each link in linkList
if link <>"" and not isNull(link) then
objTextFile.writeLine(link & "<br>")
end if
next
objTextFile.writeLine("</html>")
objTextFile.Close
set fso = nothing
set objTextFile = nothing
'on error goto 0
end sub
跟進-解決
添加3秒的延遲可以解決該問題,但是會大大延遲處理時間。 因此,與其在每次想寫入文件時都打開和關閉文件,不如將它保持打開狀態直到整個腳本完成為止,因此不需要延遲。
sub writeFile()
if needToCreateFile then
set objTextFile = fs.CreateTextFile(server.mappath("google/linklist.html"),true)
objTextFile.writeLine("<!DOCTYPE html>")
objTextFile.writeLine("<html>")
objTextFile.writeLine("<title>")
objTextFile.writeLine("Content Listing")
objTextFile.writeLine("</title>")
needToCreateFile = false
end if
'Write contents of array to file
for each link in linkList
if link <>"" and not isNull(link) then
objTextFile.writeLine(link & "<br>")
end if
next
objTextFile.writeLine("</html>")
' objTextFile.Close
' set fso = nothing
' set objTextFile = nothing
end sub
添加3秒的延遲可以解決該問題,但是會大大延遲處理時間。 因此,與其在每次想寫入文件時都打開和關閉文件,不如將它保持打開狀態直到整個腳本完成為止,因此不需要延遲。 請參閱上面的修改腳本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.