如何将整个VB6项目保存到新文件夹?包括所有模块

3
我该如何将整个VB6项目保存到新文件夹中?包括所有模块。我需要处理一些旧的VB6项目,想要将它们保存到新文件夹中,但是当我保存项目时,只有vbp文件被保存了,没有模块或frm文件。我希望能够将所有信息保存到一个文件夹中,而不是逐个移动每个BAS文件。这是否可能?
补充说明:前两个回复很有道理。但我的问题是,BAS模块似乎散落在各处,让Windows资源管理器的工作变得有点棘手。如果必须这样做,我会的,但是我正在寻找更简单的方法。
谢谢。
5个回答

4

针对问题的新“补充”:

  1. 将VBP和文件在Windows资源管理器中移动到一个全新的目录。
  2. 在文本编辑器中打开VBP并将任何绝对路径更改为相对路径。VBP文件是简单的文本文件,格式甚至在VB6手册中有说明。

这里有一个例子。下面这个恶意的VBP有很多绝对路径。

Type=Exe 
Form=c:\who\knows\where\B_Form.frm 
Module=CModule; z:\magic\mapped\network\drive\heehee\C_Module.bas 
Class=DClass; x:\personal\usb\stick\D_Class.cls 

它将被更改为这个良性的VBP,它引用文件的本地副本。您可以使用子目录的相对路径。

Type=Exe 
Form=B_Form.frm 
Module=CModule; C_Module.bas 
Class=DClass; subdirectory\D_Class.cls 

3
如果您是指在Visual Studio内部进行操作,我认为您只能通过对每个文件执行“另存为”的方式来实现......但更简单的方法是使用Windows资源管理器将整个解决方案的文件夹结构复制到另一个文件夹中(或从源代码仓库递归地“获取”到不同的本地目标),然后在新位置打开解决方案或项目文件... 项目文件中指向所有单独源代码和其他文件所在位置的指针通常都以相对路径的形式存储,相对于项目文件所在的文件夹...

所有的答案都很好,但这是我使用的技巧。谢谢大家。 - JimDel
顺便说一下:如果您有已注册的引用或组件的相对/绝对路径,可以从路径名中删除目录。在我看来这是不必要的。 - Berry Tsakala

1

我已经有一段时间没有使用VB6了,但我会尝试使用Windows资源管理器移动它们,然后手动编辑VBP文件以指向新位置。如果我没记错的话,相对路径在VBP中是可以的,所以你甚至可能不需要进行任何更改。


1
  1. 如果合适,解除与源代码控制的绑定。
  2. 将其作为全新的解决方案/项目提交到源代码控制中。
  3. 从软件配置管理工具(SCM)中递归地获取到一个新目录中。
  4. 你就拥有了新的副本。

0

创建VB6插件。您可以从以下链接下载它:http://pan.baidu.com/s/1CXO3k 或者您也可以使用下面的代码创建您自己的插件。

Option Explicit

Public VBInstance As VBIDE.VBE
Public Connect As Connect

Private Sub CancelButton_Click()
Connect.Hide
End Sub

Private Sub OKButton_Click()
On Error Resume Next
Dim strProject As String
Dim strPath As String
Dim strPath2 As String
Dim strFile As String
Dim strPrjFile As String
Dim rst As VbMsgBoxResult
Dim m, n As Long
Dim col2 As Collection, col As Collection
Dim vbCom As VBComponent
Dim fso As FileSystemObject
Dim ts As TextStream
Dim f1 As String, f2 As String

strProject = Me.VBInstance.ActiveVBProject.FileName
strPath = ParseFileName(strProject, strPrjFile)

strPath2 = setFolder

If strPath = "" Or strPath = strPath2 Then
    MsgBox "target folder is invalid or same as the project folder. Can't copy."
    Exit Sub
End If
Set col2 = New Collection
Set col = New Collection
Set fso = New FileSystemObject
Set ts = fso.CreateTextFile(strPath2 & "\wemeet.log", False)
For m = Me.VBInstance.ActiveVBProject.VBComponents.Count To 1 Step -1
    Set vbCom = Me.VBInstance.ActiveVBProject.VBComponents(m)
    For n = 1 To vbCom.FileCount
        f1 = vbCom.FileNames(n)
        ParseFileName f1, strFile
        f2 = strPath2 & "\" & strFile
        fso.CopyFile f1, f2
        col.Add f1
        col2.Add f2
        ts.WriteLine "" & Now() & " [Move]: " & f1
        ts.WriteLine "" & Now() & " [To  ]: " & f2
        ts.WriteBlankLines 1
    Next
    Me.VBInstance.ActiveVBProject.VBComponents.Remove vbCom
Next
For m = 1 To col2.Count
    Me.VBInstance.ActiveVBProject.VBComponents.AddFile col2.Item(m)
    ts.WriteLine "" & Now() & " [Add]: " & col2.Item(m)
    ts.WriteBlankLines 1
Next

Me.VBInstance.ActiveVBProject.SaveAs strPath2 & "\" & strPrjFile
ts.WriteLine "" & Now() & " [SaveAs]: " & strPath2 & "\" & strPrjFile
ts.WriteBlankLines 1
ts.Close
fso.OpenTextFile strPath2 & "\wemeet.log"
Set fso = Nothing
Set col = Nothing
Set col2 = Nothing
Set vbCom = Nothing
Connect.Hide
End Sub

Private Function ParseFileName(ByVal sPath As String, ByRef sFile As String) As String
Dim fso As New FileSystemObject
If fso.FileExists(sPath) Then
    ParseFileName = fso.GetParentFolderName(sPath)
    sFile = fso.GetFileName(sPath)
Else
    ParseFileName = ""
    sFile = ""
End If
Set fso = Nothing
End Function


Private Function setFolder() As String
Dim objDlg As Object
Dim objStartFolder As Object
Set objDlg = CreateObject("Shell.Application")

Set objStartFolder = objDlg.BrowseForFolder(&H0, "Select a folder", &H10 + &H1)

If InStr(1, TypeName(objStartFolder), "Folder") > 0 Then
    setFolder = objStartFolder.ParentFolder.ParseName(objStartFolder.Title).Path
End If
Set objDlg = Nothing
End Function

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接