如何将文本文件编译进VB生成EXE中,运行时再释放出来?

时间:2021-06-10 19:53:37
初学VB6不久,编一小工具要实现:
在1个特定目录下也有2个文本文件是供一WORD宏读取的,我改写了这2个文件,想将它们编译到EXE中,当然目的是不让别人看到是如何改写的。当运行该EXE文件时再将这2个文件分别释放出来供WORD宏读取,程序运行完毕再删除。但如何将它们直接释放到原目录下不仅会覆盖掉原来那2个文件,而且别人还是可能在运行过程中将其COPY出来。
怎样解决此问题,我百思不得。请高手赐招。我是新手,身边又无人指点。所以最好详细点。非常谢谢!

9 个解决方案

#1


建立一个新工程,打开资源管理器 (在外接程序菜单->外接程序管理器 中找),将那两个文件拖入到资源管理器中,应该会建立两个自定义资源“CUSTOM”101 102.
Option Explicit

Dim p As String, F1 As String, F2 As String

Private Sub Form_Load()
  Dim TEMP() As Byte
  p = App.Path
  If Right(p, 1) <> "\" Then p = p & "\"
  TEMP = LoadResData(101, "CUSTOM")
  If UBound(TEMP) > 0 Then
    Open p & F1 For Binary As #1
    Put #1, , TEMP
    Close #1
  End If
  
  TEMP = LoadResData(102, "CUSTOM")
  If UBound(TEMP) > 0 Then
    Open p & F2 For Binary As #1
    Put #1, , TEMP
    Close #1
  End If
  
End Sub

Private Sub Form_Unload(Cancel As Integer)
  Kill p & F1
  Kill p & F2
End Sub

#2


非常谢谢gguueesstt!
我是按您的方法,资源管理器也确实如您所言。但我调试到
    Open p & F1 For Binary As #1
时报:路径未找到?
也许我问的问题实在肤浅,恳请耐心指点。

#3


f1 和 f2 分别是你的那两个文本文件的名子。

#4


在使用时要先赋值,我不知道具体名称,所以没有赋值。。。

#5


再次感谢gguueesstt!
我加了2句:
  F1 = "a1.txt"
  F2 = "a2.txt"
的确可以PASS,且能部分达到目的,但还有3个问题:
1. 因a1.txt和a2.txt是另一程序的两个接口文件,只是为达到特殊要求我改写了它们,故它们的位置取决于别人将那个程序安装到了何处(安装的缺省盘符和目录名都可能被安装者改变,但存放它们的子目录名是固定不变,名为:CONVERTOR),所以能否在程序中加进能准确释放这2个文件到该子目录下?
2. 我刚才试了一下,文件释放出来后,如不退出程序,双击释放出来的2个文件还是能被记事本打开,里面的内容暴露无遗,所以没达到加到EXE文件防止别人看到文件内容的目的。不知此要求能否实现?
3. 释放后,会覆盖掉原子目录下的两个同名文件,能否不覆盖掉它们,哪怕是改名过去再改名回来也可以。

#6


1、要想准确的找到有难度。。。
2、a1和a2是供其它程序调用的,所以他是可以被其它程序访问的,这样就很难避免被发现,你可以给文件加隐藏属性,增加被发现的难度(  SetAttr p & f1, vbHidden )(删除时先恢复属性 SetAttr "",vbNormal : kill p & f1 )。
3、
在Private Sub Form_Load()事件中增加
   if Dir(p & f1, vbHidden) <> "" then  filecopy p & f1,p & f1 & ".bak1"
   if Dir(p & f2, vbHidden) <> "" then  filecopy p & f2,p & f2 & ".bak1"

在Private Sub Form_unLoad()事件中增加
   if Dir(p & f1 & ".bak1", vbHidden) <> "" then  filecopy p & f1 & ".bak1",p & f1
   if Dir(p & f2 & ".bak1", vbHidden) <> "" then  filecopy p & f2 & ".bak1",p & f2

#7


再次十分感谢gguueesstt!
在您的指点下,我这一问题基本得到解决。我第一次在此坛发问,不知道怎样送分给您以表谢意。

#8


如2楼所言,利用资源实现

#9


点击帖子中的"管理",将会出现另一个界面,在"给分"标题后,输入自己的用户密码,在下面的帖子中给出相应的分,然后点击按钮"给分"

#1


建立一个新工程,打开资源管理器 (在外接程序菜单->外接程序管理器 中找),将那两个文件拖入到资源管理器中,应该会建立两个自定义资源“CUSTOM”101 102.
Option Explicit

Dim p As String, F1 As String, F2 As String

Private Sub Form_Load()
  Dim TEMP() As Byte
  p = App.Path
  If Right(p, 1) <> "\" Then p = p & "\"
  TEMP = LoadResData(101, "CUSTOM")
  If UBound(TEMP) > 0 Then
    Open p & F1 For Binary As #1
    Put #1, , TEMP
    Close #1
  End If
  
  TEMP = LoadResData(102, "CUSTOM")
  If UBound(TEMP) > 0 Then
    Open p & F2 For Binary As #1
    Put #1, , TEMP
    Close #1
  End If
  
End Sub

Private Sub Form_Unload(Cancel As Integer)
  Kill p & F1
  Kill p & F2
End Sub

#2


非常谢谢gguueesstt!
我是按您的方法,资源管理器也确实如您所言。但我调试到
    Open p & F1 For Binary As #1
时报:路径未找到?
也许我问的问题实在肤浅,恳请耐心指点。

#3


f1 和 f2 分别是你的那两个文本文件的名子。

#4


在使用时要先赋值,我不知道具体名称,所以没有赋值。。。

#5


再次感谢gguueesstt!
我加了2句:
  F1 = "a1.txt"
  F2 = "a2.txt"
的确可以PASS,且能部分达到目的,但还有3个问题:
1. 因a1.txt和a2.txt是另一程序的两个接口文件,只是为达到特殊要求我改写了它们,故它们的位置取决于别人将那个程序安装到了何处(安装的缺省盘符和目录名都可能被安装者改变,但存放它们的子目录名是固定不变,名为:CONVERTOR),所以能否在程序中加进能准确释放这2个文件到该子目录下?
2. 我刚才试了一下,文件释放出来后,如不退出程序,双击释放出来的2个文件还是能被记事本打开,里面的内容暴露无遗,所以没达到加到EXE文件防止别人看到文件内容的目的。不知此要求能否实现?
3. 释放后,会覆盖掉原子目录下的两个同名文件,能否不覆盖掉它们,哪怕是改名过去再改名回来也可以。

#6


1、要想准确的找到有难度。。。
2、a1和a2是供其它程序调用的,所以他是可以被其它程序访问的,这样就很难避免被发现,你可以给文件加隐藏属性,增加被发现的难度(  SetAttr p & f1, vbHidden )(删除时先恢复属性 SetAttr "",vbNormal : kill p & f1 )。
3、
在Private Sub Form_Load()事件中增加
   if Dir(p & f1, vbHidden) <> "" then  filecopy p & f1,p & f1 & ".bak1"
   if Dir(p & f2, vbHidden) <> "" then  filecopy p & f2,p & f2 & ".bak1"

在Private Sub Form_unLoad()事件中增加
   if Dir(p & f1 & ".bak1", vbHidden) <> "" then  filecopy p & f1 & ".bak1",p & f1
   if Dir(p & f2 & ".bak1", vbHidden) <> "" then  filecopy p & f2 & ".bak1",p & f2

#7


再次十分感谢gguueesstt!
在您的指点下,我这一问题基本得到解决。我第一次在此坛发问,不知道怎样送分给您以表谢意。

#8


如2楼所言,利用资源实现

#9


点击帖子中的"管理",将会出现另一个界面,在"给分"标题后,输入自己的用户密码,在下面的帖子中给出相应的分,然后点击按钮"给分"