vb6.0 修改txt文件的数据,不是创建和写入

时间:2022-09-17 11:46:59
我想修改txt文件中的部分内容,没变更的数据也不被变更。
我现在做了好像都是把原来文件全部覆盖掉了。
test.txt的内容:
user:a001
password:123

我只想变更password的内容:
user:a001
password:234

怎么样实现上面的功能。

我的代码(刚接触不懂):
  Set pobjFSO = CreateObject("Scripting.FileSystemObject")
  If Not (pobjFSO.FileExists("F:\test.txt")) Then
    Exit Sub
  Else
    Set pobjFile = pobjFSO.GetFile("F:\test.txt")
  End If

  Set pobjTS = pobjFile.OpenAsTextStream(ForWriting)
  pobjTS.Line = 2
  pobjTS.WriteLine ("234")
  pobjTS.Close
  Set pobjTS = Nothing

13 个解决方案

#1


就此等运用,何不使用数据库?一个Access数据库,很简单,很方便。且安全性更高。

#2


整体读进 处理后 然后整体写入文件吧

查看你了下 pobjTS.Line是只读的。

Property Line As Long
    只读
    Scripting.TextStream 的成员
    Current line number

#3


首先感谢两位能回答,但是我只是举个例的,
我是因为有的文件太大,不打不开,但是直到结构,
所以,我想修改其中的部分内容。所以就想实现上面的那个功能的。
望各位高手指点一下。
是否可以实现。
好像我知道的现在写文件的,都是会把存在的内容覆盖掉的。

#4


引用 3 楼 wandazcc 的回复:
首先感谢两位能回答,但是我只是举个例的,
我是因为有的文件太大,不打不开,但是直到结构,
所以,我想修改其中的部分内容。所以就想实现上面的那个功能的。
望各位高手指点一下。
是否可以实现。
好像我知道的现在写文件的,都是会把存在的内容覆盖掉的。

就如你所说,我觉得你非常有必要把它修改为Access方式的。难度并不大。

#5


首先非常谢谢,我知道你的意思,
你的意思是说像我举的这个例子的功能(修改用户和密码),
是完全可以放在数据库里面的,
这个我理解,
但是现在我要修改的文件不是单纯修改用户和密码的功能的。
还有一些内容是无法放到数据库里面的,
如果能放的话,
我就不会用文件存储了(这个我不大懂,迫不得已才问这个方法的)。
望指点一下~
谢谢~


#6



原来如此。。。
呵呵
不过貌似一般都是全读全写

#7


你所看到的文件修改,在实际的实现上,都是重新创建文件。所谓的“覆盖”,也并非一定在物理原址重写,而往往是重新分配 FAT 链表。当然,在内存缓冲区中操作时有可能是“真的”覆盖原数据。

你可以用二进制方式打开文件,用 Seek 语句移动指针,然后用 Put 语句写入新的内容。Close 时,文件会重写。当然了,至少有部分扇区在 FAT 链表中被替换了。

#8


你说的就是顺序文件,顺序文件啊...不就是要一点一点读取进来,是要修改的就修改,然后把读进来的和修改的都存新文件里面.

随机文件就想ls说的,定位,修改,保存...随机文件用的是记录,记录的长度是固定的,修改就限制在字段里面了.如果用随机文件修改顺序文件,那比如你密码以前是3字符,要修改成4字符,那后面的内容就必须后移1字节了..

#9


用二进制打开可以“原地”修改
但是字节数不能变,想把4位长度的数据改成5位是不行的。

#10


首先谢谢各位、
关于用二进制修改、可以提供点例子吗?
我是用vb6.0的、刚开始用、许多都不大懂、
所以、望高手能给个例子、谢谢~

#11


按行读取,内容不变的直接写到新文件,需修改的修改后写入新文件,最后删除原文件~~~~

#12


文件比较大、不好全部读取、否则就全部替换了。不用定点修改了。

还有、我研究了一下二进制修改好像不行的样子、
代码:
    Dim info As String
      info = "5432"
      Open "F:\test.txt" For Input As #1
    
      'Input #1, MyString, MyNumber
      Seek #1, 11
      Input #1, info
      Close #1
      MsgBox "OK"

#13


研究出来了、
感谢各位啊~
结帖送分了~
由于分不多、就每人分一点把~
感谢一下~
研究出来的代码:
    Dim info As String
      info = "test"
      Open "F:\test.txt" For Binary Access Write As #1
    
      'Input #1, MyString, MyNumber
      'Seek #1, 11
      Put #1, 11, info
      Close #1
      MsgBox "OK"

#1


就此等运用,何不使用数据库?一个Access数据库,很简单,很方便。且安全性更高。

#2


整体读进 处理后 然后整体写入文件吧

查看你了下 pobjTS.Line是只读的。

Property Line As Long
    只读
    Scripting.TextStream 的成员
    Current line number

#3


首先感谢两位能回答,但是我只是举个例的,
我是因为有的文件太大,不打不开,但是直到结构,
所以,我想修改其中的部分内容。所以就想实现上面的那个功能的。
望各位高手指点一下。
是否可以实现。
好像我知道的现在写文件的,都是会把存在的内容覆盖掉的。

#4


引用 3 楼 wandazcc 的回复:
首先感谢两位能回答,但是我只是举个例的,
我是因为有的文件太大,不打不开,但是直到结构,
所以,我想修改其中的部分内容。所以就想实现上面的那个功能的。
望各位高手指点一下。
是否可以实现。
好像我知道的现在写文件的,都是会把存在的内容覆盖掉的。

就如你所说,我觉得你非常有必要把它修改为Access方式的。难度并不大。

#5


首先非常谢谢,我知道你的意思,
你的意思是说像我举的这个例子的功能(修改用户和密码),
是完全可以放在数据库里面的,
这个我理解,
但是现在我要修改的文件不是单纯修改用户和密码的功能的。
还有一些内容是无法放到数据库里面的,
如果能放的话,
我就不会用文件存储了(这个我不大懂,迫不得已才问这个方法的)。
望指点一下~
谢谢~


#6



原来如此。。。
呵呵
不过貌似一般都是全读全写

#7


你所看到的文件修改,在实际的实现上,都是重新创建文件。所谓的“覆盖”,也并非一定在物理原址重写,而往往是重新分配 FAT 链表。当然,在内存缓冲区中操作时有可能是“真的”覆盖原数据。

你可以用二进制方式打开文件,用 Seek 语句移动指针,然后用 Put 语句写入新的内容。Close 时,文件会重写。当然了,至少有部分扇区在 FAT 链表中被替换了。

#8


你说的就是顺序文件,顺序文件啊...不就是要一点一点读取进来,是要修改的就修改,然后把读进来的和修改的都存新文件里面.

随机文件就想ls说的,定位,修改,保存...随机文件用的是记录,记录的长度是固定的,修改就限制在字段里面了.如果用随机文件修改顺序文件,那比如你密码以前是3字符,要修改成4字符,那后面的内容就必须后移1字节了..

#9


用二进制打开可以“原地”修改
但是字节数不能变,想把4位长度的数据改成5位是不行的。

#10


首先谢谢各位、
关于用二进制修改、可以提供点例子吗?
我是用vb6.0的、刚开始用、许多都不大懂、
所以、望高手能给个例子、谢谢~

#11


按行读取,内容不变的直接写到新文件,需修改的修改后写入新文件,最后删除原文件~~~~

#12


文件比较大、不好全部读取、否则就全部替换了。不用定点修改了。

还有、我研究了一下二进制修改好像不行的样子、
代码:
    Dim info As String
      info = "5432"
      Open "F:\test.txt" For Input As #1
    
      'Input #1, MyString, MyNumber
      Seek #1, 11
      Input #1, info
      Close #1
      MsgBox "OK"

#13


研究出来了、
感谢各位啊~
结帖送分了~
由于分不多、就每人分一点把~
感谢一下~
研究出来的代码:
    Dim info As String
      info = "test"
      Open "F:\test.txt" For Binary Access Write As #1
    
      'Input #1, MyString, MyNumber
      'Seek #1, 11
      Put #1, 11, info
      Close #1
      MsgBox "OK"