我该怎么清空一个数据流?

前端开发 2026-07-11

我想替换一个文本文件的内容。

  Set stream = CreateObject("ADODB.Stream")
  stream.Mode = 3
  stream.Type = 2
  stream.Charset = "UTF-8"
  stream.Open
  stream.LoadFromFile p
  stream.Position = 0
  strContent = stream.ReadText
  re.IgnoreCase = False
  re.Global = False
  re.Pattern = ",""beautifybuttonstate"":""[^""]+"""
  strContent = re.Replace(strContent, ",""beautifybuttonstate"":""USER_HIDE""")
  stream.Position = 0
  stream.WriteText strContent
  stream.SaveToFile p, 2
  stream.Close

p 是一个包含文本文件完整路径的字符串。
re 是一个 vbscript.regexp 对象。

问题在于如果替换后的内容比原始内容短,得到的文件大小将与原始文件相同,最后的若干字符仍未被替换,保持原样。

先行致谢。

注:我正在处理的文件是JSON。如果你知道使用VBScript更好地替换JSON中某个值的方法,请告诉我具体做法。

解决方案

在运行下面任一脚本之前,请确保你的JSON文件以不带BOM的 UTF-8保存。

你可以使用FSO,并将文件按ANSI处理。UTF-8字符将被保留。

UpdateJSON.vbs

Set oFSO = CreateObject("Scripting.FileSystemObject")
Set re = CreateObject("VBScript.RegExp")
ForReading = 1
ForWriting = 2
p = "C:\Test\Test.json"

Set oFile = oFSO.OpenTextFile(p, ForReading, False)
Data = oFile.ReadAll
oFile.Close

re.IgnoreCase = False
re.Global = False
re.Pattern = ",""beautifybuttonstate"":""[^""]+"""
Data = re.Replace(Data, ",""donatebuttonstate"":""USER_HIDE""")

Set oFile = oFSO.OpenTextFile(p, ForWriting, False)
oFile.Write Data
oFile.Close

你也可以在HTA中直接使用JScript来操作JSON文件:

UpdateJSON.hta

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=11" />
<script language="JScript">
window.onload = function ()
{
  window.resizeTo(100, 100);

  var ForReading = 1;
  var ForWriting = 2;
  var p = "C:\\Test\\Test.json";

  var oFSO = new ActiveXObject("Scripting.FileSystemObject");

  var oFile = oFSO.OpenTextFile(p, ForReading, false);
  var data = oFile.ReadAll();
  oFile.Close();

  var oJSON = JSON.parse(data);

  if (oJSON.hasOwnProperty("beautifybuttonstate"))
  {
      delete oJSON.beautifybuttonstate;
      oJSON.donatebuttonstate = "USER_HIDE";
  }

  oFile = oFSO.OpenTextFile(p, ForWriting, false);
  oFile.Write(JSON.stringify(oJSON));
  oFile.Close();

  window.close();
}
</script>
</head>
</html>
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章