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

时间:2009-12-23 16:17:20

标签: vb6

如何将整个VB6项目保存到新文件夹?模块和所有。我需要处理一些旧的VB6项目。我想将它们保存到新文件夹但是当我保存项目时,保存的所有内容都是vbp文件。没有模块,没有frm文件。我希望能够将所有信息保存到单个文件夹,而无需一次移动一个BAS文件。这甚至可能吗?

另外:前2个回复很有道理。但我的问题是BAS模块似乎分散在各处。使Windows资源管理器完成工作有点棘手。如果我必须,但我正在寻找一种更简单的方法。

由于

5 个答案:

答案 0 :(得分:4)

鉴于该问题的新“补充”:

  1. 将VBP和Windows资源管理器中的文件移动到一个全新的目录。
  2. 在文本编辑器中打开VBP,并将所有绝对路径更改为相对路径。 VBP文件是简单的文本文件,格式甚至是documented in the VB6 manual
  3. 这是一个例子。下面这个邪恶的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 
    

答案 1 :(得分:3)

如果你的意思是在Visual Studio中,我认为你不能为每个文件做Save As ...

但更简单的方法是只使用Windows资源管理器并将解决方案的整个文件夹结构复制到另一个文件夹中(或者从源代码存储库到另一个本地目的地执行递归“获取”),然后打开新位置中的解决方案或项目文件...项目文件中的指针告诉Visual Studio所有单独的源代码和其他文件所在的位置通常都存储为相对路径,相对于项目文件所在的文件夹......

答案 2 :(得分:1)

我使用VB6已经有一段时间了,但我很想使用Windows资源管理器移动它们,然后手动编辑VBP文件以指向新的位置。如果我没记错的话,VBP中的相对路径很好,所以你甚至不需要对任何变化进行操作。

答案 3 :(得分:1)

  1. 如果有能力/适当的话,从源代码管理中取消绑定。
  2. 将源代码管理检查为全新的解决方案/项目
  3. 从SCM递归“获取”到新目录。
  4. 这是你的新副本。

答案 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