2014-01-28 41 views
0

我試圖找到一個編輯和寫入資源.rc文件的過程;我試圖使用列出的示例代碼在 How to increment values in resourse file by using vbscript但兩個樣品中的最後一行返回相同的錯誤(fso.OpenTextFile(rcfile,2).WRITE rctext):試圖寫入.rc文件的VBS腳本返回錯誤

Error: Invalid procedure call or argument 
Code: 800A0005 
Source: Microsoft VBScript runtime error 

我修改腳本寫出來到一個.txt文件,並且工作正常,但我很困惑可能會導致寫入.rc文件的問題。

回答

0

看來我的問題的答案需要你的答案(@ MC ND和@ Ekkehard.Horner);另外,一旦我將vbs腳本更改爲以Unicode格式打開並寫入.rc文件,我不知道爲什麼必須這樣做,腳本無錯地執行。

這裏是它的vbs腳本的最終形式:

Const ForReading = 1, ForWriting = 2 
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0 
Const DoNotCreate = false 

rcFile = "C:\Path\To\RC\File.rc" 
major = 4 
minor = 3 
maint = 2 
build = 1 
version = major & "," & minor & "," & maint & "," & build 

Set fso  = CreateObject("Scripting.FileSystemObject") 
Set fileObj = fso.OpenTextFile(rcFile, ForReading, DoNotCreate, TristateTrue) 
rcText  = fileObj.ReadAll 
fileObj.Close 

Set regex  = New RegExp 
regex.Global = True 
regex.Pattern = "(PRODUCTVERSION|FILEVERSION) \d+,\d+,\d+,\d+" 
rcText  = regex.Replace(rcText, "$1 " & version) 

regex.Pattern = "(""(ProductVersion|FileVersion)"",) ""\d+, \d+, \d+, \d+""" 
rcText  = regex.Replace(rcText, "$1 """ & Replace(version, ",", ", ") & """") 

Set fileObj = fso.GetFile(rcFile) 
Set textStream = fileObj.OpenAsTextStream(ForWriting, TristateTrue) 
textStream.Write rcText 
textStream.Close 

似乎不工作的唯一的事情就是更換ProduceVersion正則表達式|文件版本值,但希望我能敲定了這一點內合理的時間。

0

從聯樣品(簡體)

rctext = fso.OpenTextFile(rcfile).ReadAll 
rctext = .... 
fso.OpenTextFile(rcfile, 2).Write rctext 

的想法是讀取所有的文件,並儘可能不存在變量保存到打開的文件的引用,它是封閉的,然後改變什麼需要然後再次打開文件,現在寫入文件,並將更改後的內容寫入文件

而且,通常它可以工作。但是有時,爲閱讀而打開的文件沒有足夠快地關閉,以便稍後打開它進行書寫。

以確保文件被關閉,然後可以打開書寫,閱讀代碼更改爲

set f = fso.OpenTextFile(rcfile) 
rctext = f.ReadAll 
f.Close 
0

當你的線

fso.OpenTextFile(rcfile, 2).Write rctext 

做了三件事(接入FSO,打開文件,寫信給它),有很多事情可能會出錯。請參閱this answer,以瞭解關於前兩個操作的問題。另一個answer涉及寫。

在你的情況下,證據 - 與a.txt一起工作,但與b.rc無關 - 使文件的開頭非常不可能被指責(所以.Close不會拯救你)。我懷疑.rc包含文本流無法編碼的Unicode(UTF-8/UTF-16)數據。

因此,請使用參數unicode讀取/寫入UTF-16編碼的文件或UTF-8的ADODB.Stream