【问题标题】:How do I save an entire VB6 project to a new folder? Modules and all如何将整个 VB6 项目保存到新文件夹?模块和所有
【发布时间】:2015-05-25 12:40:46
【问题描述】:

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

补充:前 2 条回复很有道理。但我的问题是 BAS 模块似乎散落在各处。让 Windows 资源管理器完成这项工作有点棘手。如果必须,我会,但正在寻找更简单的方法。

谢谢

【问题讨论】:

    标签: vb6


    【解决方案1】:

    鉴于问题的新“补充”:

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

    这是一个例子。下面这个邪恶的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 
    

    【讨论】:

      【解决方案2】:

      如果您的意思是在 Visual Studio 中,我认为您只能对每个文件执行 Save As...

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

      【讨论】:

      • 所有好的答案,但这是我使用的技术。谢谢大家
      • 附带说明:如果您有已注册引用或组件的相对/绝对路径,则可以从路径名中删除目录。在我看来没有必要
      【解决方案3】:

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

      【讨论】:

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

        【讨论】:

          【解决方案5】:

          创建一个 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
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-01-05
            • 2021-12-30
            相关资源
            最近更新 更多