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

问题描述:

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

增加:前2个回复很有意义。但我的问题是,BAS模块似乎分散在各地。使Windows资源管理器完成这项工作有点棘手。如果我必须,我会但会寻找一个更简单的方法。

感谢

如果您在Visual Studio中的意思是,我不认为你可以通过做Save As为每个文件除外...

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

+0

所有好的答案,但这是我用过的技术。谢谢大家 – JimDel 2009-12-23 20:31:54

+0

一面注意:如果您有注册引用或组件的相对/绝对路径,可以从路径名中删除目录。在我看来,没有必要 – 2011-11-01 13:36:02

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

  1. 从源代码控制中解除绑定,如果能够/适当的话。
  2. 作为全新解决方案/项目签入源代码管理
  3. 递归从您的SCM中“获取”到新目录中。
  4. 有你的新副本。

鉴于新的“加法”的问题:

  1. 移动船民和在Windows Explorer中一个全新的目录中的文件。
  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 

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