问题:
我想拷贝一个文件夹,及其里面的内容如何进行操作?
我用VB编写的一个程序,现在的情况是在同一台机器上可以同时启动多个程序,如何控制同时只能启动一个?

解决方案 »

  1.   

    //如何控制同时只能启动一个?
    if App.PrevInstance then
       end
    end if
      

  2.   

    CopyFolder 方法
             描述从一个地方递归地复制一个文件夹到另一个地方。语法object.CopyFolder source, destination[, overwrite]CopyFolder 方法语法有如下几部分:部分 描述 
    Object 必需的。始终为一个 FileSystemObject 的名字。 
    source 必需的。指明一个或多个被复制文件夹的字符串文件夹说明,可以包括通配符。  
    destination 必需的。指明 source 中被复制文件夹和子文件夹的接受端的字符串,不允许有通配符。 
    overwrite 选项的。Boolean 值,它表示已存在的文件夹是否被覆盖。如果为 True,文件被覆盖。如果为 False,文件不被覆盖。缺省值为 True。 
    说明通配符仅可用于 source 参数的最后一个路径部件。例如你可以在下面情况使用它:FileSystemObject.CopyFolder "c:\mydocuments\letters\*", "c:\tempfolder\"但不能在下面情况使用它:FileSystemObject.CopyFolder "c:\mydocuments\*\*", "c:\tempfolder\"如果 source 包含通配符或 destination 以路径分隔符(\)为结尾,则认为 destination 是一个已存在的文件夹,在其中复制相匹配的文件夹和子文件夹。否则认为 destination 是一个要创建的文件夹的名字。不论何种情况,当复制一个文件夹时,可能发生四种事件。 如果 destination 不存在,source 文件夹和它所有的内容得到复制。这是通常的情况。
    如果 destination 是一个已存在的文件,则发生一个错误。
    如果 destination 是一个目录,它将尝试复制文件夹和它所有的内容。如果一个包含在 source 的文件已在 destination 中存在,当 overwrite 为 False 时发生一个错误,否则它将尝试覆盖这个文件。
    如果 destination 是一个只读目录,当尝试去复制一个已存在的只读文件到此目录并且 overwrite为 False 时,则发生一个错误。 
    如果 source 使用的通配符不能和任何文件夹匹配,也发生一个错误。CopyFolder 方法停止在它遇到的第一个错误上。不要尝试回卷错误发生前所做的任何改变。
      

  3.   

    zgvslch(烟花离落) 
    你够狠
    这样的问题你是一点机会都不给啊!
    都让你说了!
    我去睡觉了!
    楼主88
      

  4.   

    'API:可以设置拷贝文件的动画
    Option ExplicitPrivate Const FO_COPY = &H2&Private Const FO_DELETE = &H3&
    Private Const FO_MOVE = &H1&
    Private Const FO_RENAME = &H4&
    Private Const FOF_ALLOWUNDO = &H40&
    Private Const FOF_CONFIRMMOUSE = &H2&
    Private Const FOF_CREATEPROGRESSDLG = &H0&
    Private Const FOF_FILESONLY = &H80&
    Private Const FOF_MULTIDESTFILES = &H1&
    Private Const FOF_NOCONFIRMATION = &H10&
    Private Const FOF_NOCONFIRMMKDIR = &H200&
    Private Const FOF_RENAMEONCOLLISION = &H8&
    Private Const FOF_SILENT = &H4&
    Private Const FOF_SIMPLEPROGRESS = &H100&
    Private Const FOF_WANTMAPPINGHANDLE = &H20&Private Type SHFILEOPSTRUCT
    hwnd As Long
    wFunc As Long
    pFrom As String
    pTo As String
    fFlags As Integer
    fAnyOperationsAborted As Long
    hNameMappings As Long
    lpszProgressTitle As String
    End TypePrivate Declare Sub CopyMemory Lib "KERNEL32" _
       Alias "RtlMoveMemory" _
       (hpvDest As Any, _
       hpvSource As Any, _
       ByVal cbCopy As Long)Private Declare Function SHFileOperation Lib "Shell32.dll" _
       Alias "SHFileOperationA" _
       (lpFileOp As Any) As LongPrivate Sub Form_Load()
        Check1.Caption = "Copy All Files in VB Directory"
        Check2.Caption = "Display Custom Message"
        Command1.Caption = "Copy Files"
    End SubPrivate Sub Command1_Click()
        Dim result As Long
        Dim lenFileop As Long
        Dim foBuf() As Byte
        Dim fileop As SHFILEOPSTRUCT
        
        lenFileop = LenB(fileop)    ' double word alignment increase
        ReDim foBuf(1 To lenFileop) ' the size of the structure.
        
        With fileop
           .hwnd = Me.hwnd
        
           .wFunc = FO_COPY       If Check1.Value = vbChecked Then  '支持通配符
                 .pFrom = Environ("windir") & "\*.exe"
              .fFlags = FOF_SIMPLEPROGRESS Or FOF_FILESONLY
           Else
              .pFrom = Environ("windir") & "\Explorer.exe" _
                       & vbNullChar _
                       & Environ("windir") & "\WinHelp.exe" _
                       & vbNullChar _
                       & vbNullChar
           End If
        
           .pTo = "C:\testfolder\" & vbNullChar & vbNullChar
        
           If Check2.Value = vbChecked Then   '是否显示动画
              .fFlags = FOF_SIMPLEPROGRESS Or FOF_NOCONFIRMATION Or _
                        FOF_NOCONFIRMMKDIR
              .lpszProgressTitle = "Your custom dialog string " & _
                                   "appears here." & vbNullChar _
                                                   & vbNullChar
           End If
        End With
        
        
        Call CopyMemory(foBuf(1), fileop, lenFileop)
        
        
        Call CopyMemory(foBuf(19), foBuf(21), 12)
        result = SHFileOperation(foBuf(1))
        
        If result <> 0 Then
           MsgBox Err.LastDllError
        Else
           If fileop.fAnyOperationsAborted <> 0 Then
              MsgBox "Operation Failed"
           End If
        End If
    End Sub
      

  5.   


    '*************************************************************************
    '功能描述:从一个完全共享文件取文件
    '备注:
    '程序员:cosio
    '最后修改人:
    '修改时间:2004/10/18
    '*************************************************************************Option Explicit
    Dim FSO As New FileSystemObject
    Dim filename As String'删除API函数
    Private Declare Function DeleteFile Lib "kernel32" Alias "DeleteFileA" (ByVal lpFileName As String) As LongPrivate Sub Command2_Click()
       Unload Me
    End SubPrivate Sub Form_Load()
        Dim mfolder As Folder
        Set mfolder = FSO.GetFolder("\\192.168.0.11\2")
        Dim mnode As Node
        Set mnode = Me.TreeView1.Nodes.Add(, , mfolder.Path, mfolder.Path)
        Dim a As File
        For Each a In mfolder.Files
            Me.List1.AddItem a.Name
        Next
        Dim subfolder As Folder
        For Each subfolder In mfolder.SubFolders
            Me.TreeView1.Nodes.Add mnode, tvwChild, subfolder.Path, subfolder.Name
        Next
        Set subfolder = Nothing
        Set a = Nothing
        Set mfolder = Nothing
    End SubPrivate Sub Form_Unload(Cancel As Integer)
    Set FSO = Nothing
    End Sub
    '显示树里面结点
    Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node)
        On Error Resume Next
        Dim mfolder As Folder
        Set mfolder = FSO.GetFolder(Node.Key)
        Dim a As File
        List1.Clear
        For Each a In mfolder.Files
            Me.List1.AddItem a.Name
        Next
        Dim subfolder As Folder
        For Each subfolder In mfolder.SubFolders
            Me.TreeView1.Nodes.Add Node, tvwChild, subfolder.Path, subfolder.Name
        Next
        Set subfolder = Nothing
        Set a = Nothing
        Set mfolder = Nothing
    End Sub
    Public Function CopyFile(Src As String, Dst As String, mProgressBar As ProgressBar) As Single
         
         Dim BTest As Single, FSize As Single
         Dim F1 As Integer, F2 As Integer
         Dim sArray() As Byte
         Dim buff As Integer
         
         Const BUFSIZE = 1024
         
         buff = 1024
         
         F1 = FreeFile
         Open Src For Binary Access Read As F1
         F2 = FreeFile
         Open Dst For Binary As F2
         
         FSize = LOF(F1)
         BTest = FSize - LOF(F2)
         ReDim sArray(BUFSIZE) As Byte
         
         Do
         If BTest < BUFSIZE Then
         buff = BTest     ReDim sArray(buff) As Byte
          
         End If
         
         Get F1, , sArray
         Put F2, , sArray
         
         BTest = FSize - LOF(F2)
         If BTest < 0 Then
         mProgressBar.Value = 100
         Else
         mProgressBar.Value = (100 - Int(100 * BTest / FSize))
         End If
         Loop Until BTest <= 0
         
         Close F1
         Close F2
         CopyFile = FSize
         
         Me.Hide    End FunctionPrivate Sub Command1_Click() filename = "d:\cross_cut\db.mdb"
      '删除已存在的文件
     DeleteFile filename'复制文件 d:\123\db.mdb 到 d:\db.mdb
     Call CopyFile("\\192.168.0.11\2\db.mdb", "d:\Cross_cut\db.mdb", ProgressBar1)End Sub
      

  6.   

    请问FileSystemObject对象如何进行声明呢?
      

  7.   

    只能启动一次
    If App.PrevInstance Then
            MsgBox "TestBug已经在运行中!"
            End
        End If
      

  8.   

    请问楼上的朋友们,如何声明FileSystemObject对象?
    如果需要进行引用,如何引用?引用什么?
      

  9.   

    参考~http://search.csdn.net/Expert/topic/1166/1166563.xml
      

  10.   

    从 Visual Basic 的第一版至今,VB中有关文件的处理都是通过使用 Open 、Write以及其它一些相关的语句和函数来实现的。随着软件技术的不断发展,加上面向对象编程概念的日臻成熟,这些文件操作语句已经不能适应软件不断增加的复杂程度的需要了。因此,从VB6.0开始,微软提出了一个全新的文件系统对象FSO。
    一、简介
    文件系统对象FSO的英文全称是File System Object ,这种对象模型提出了有别于传统的文件操作语句处理文件和文件夹的方法。通过采用object.method这种在面向对象编程中广泛使用的语法,将一系列操作文件和文件夹的动作通过调用对象本身的属性直接实现。
    FSO 对象模型不仅可以象使用传统文件操作语句那样实现文件的创建、改变、移动和删除,而且可以检测是否存在指定的文件夹,如果存在,那么,这个文件夹又位于磁盘上的什么位置。更令人高兴的是FSO 对象模型还可以获取关于文件和文件夹的信息,如名称、创建日期或最近修改日期等以及当前系统中使用的驱动器的信息,如驱动器的种类是CD-ROM还是可移动磁盘,当前磁盘的剩余空间还有多少。而以前要获取这些信息必须通过调用Windows API函数集中的相应函数才能实现。
    FSO对象模型包含在Scripting 类型库 (Scrrun.Dll)中,它同时包含了Drive、Folder、File、FileSystemObject和TextStream五个对象。其中Drive用来收集驱动器的信息,如可用磁盘空间或驱动器的类型;Folder用于创建、删除或移动文件夹,同时可以进行向系统查询文件夹的路径等操作;File的基本操作和Folder基本相同,所不同的是Files的操作主要是针对磁盘上的文件进行的;FileSystemObject是FSO对象模型中最主要对象,它提供了一套完整的可用于创建、删除文件和文件夹,收集驱动器、文件夹、文件相关信息的方法。需要注意的是,FSO对象模型提供的方法是冗余的,也就是说在实际使用中,FSO对象模型中包含的不同对象的不同方法进行的却是同样的操作,而且FileSystemObject对象的方法直接作用于其余对象,所以在后面的文章中并没有单独提到FileSystemObject对象,千万不要以为没有提到就不重要,事实上FileSystemObject对象在整个FSO对象模型中无处不在;最后的TextStream对象则是用来完成对文件的读写操作的。
    在初步了解了FSO对象模型之后,下面我们通过实际的代码对不同的对象进行进一步的阐述。
    二、FSO对象模型的应用
    (一)创建FSO对象模型
    由于FSO对象包含在Scripting 类型库 (Scrrun.Dll)中,所以在使用前首先需要在在工程中引用这个文件,单击“工程”,“引用”,然后在“引用”对话框中选中“Microsoft Scripting Runtime”前的复选框,然后单击“确定”。
    要创建FSO对象可以采用两种方法,一种是将一个变量声明为FSO对象类型:Dim fsoTest As New FileSystemObject;另一种是通过CreateObject方法创建一个FSO 对象:Set fsoTest = CreateObject(“Scripting.FileSystemObject")。在实际使用中具体采用哪种声明方法,可根据个人的使用习惯而定。
    完成了FSO对象模型的创建之后,就可以利用创建的对象模型的方法访问下属各个对象的属性来获取所需信息或进行相关操作了,具体的方法在下面结合各个对象分别讲述。
    (二)Drive对象
    上面已经提到Drive对象是用来获取当前系统中各个驱动器的信息的。由于Drive对象没有方法,其应用都是通过属性表现出来的,所以我们必须熟悉Drive对象的属性:
    AvailableSpace:返回在指定的驱动器或网络共享上的用户可用的空间容量。
    DriveLetter :返回某个指定本地驱动器或网络驱动器的字母,这个属性是只读的。
    DriveType:返回指定驱动器的磁盘类型。
    FileSystem: 返回指定驱动器使用的文件系统类型。
    FreeSpace:返回指定驱动器上或共享驱动器可用的磁盘空间,这个属性是只读的。
    IsReady:确定指定的驱动器是否准备好。
    Path :返回指定文件、文件夹、或驱动器的路径。
    RootFolder :返回一个 Folder 对象,该对象表示一个指定驱动器的根文件夹。只读属性。
    SerialNumber:返回用于唯一标识磁盘卷标的十进制序列号。
    ShareName:返回指定驱动器的网络共享名
    TotalSize :以字节为单位,返回驱动器或网络共享的总空间大小。
    VolumeName :设置或返回指定驱动器的卷标名。
    从上面的属性可以看到Drive对象基本上包含了日常操作所需的全部的驱动器信息,因此在使用中是非常方便的。下面通过一个实例讲述Drive对象的使用。首先在VB中建立一个工程,然后添加一个命令按钮,将其Caption设置为“TestDrive”,然后在click事件中加入以下代码:
    Dim fsoTest As New FileSystemObject 
    Dim drv1 As Drive, sReturn As String
    Set drv1 = fsoTest.GetDrive(“C:\")
    sReturn = “Drive " & “C:\" & vbCrLf
    sReturn = sReturn & “VolumeName" & drv1.VolumeName & vbCrLf
    sReturn = sReturn & “Total Space: " & FormatNumber(drv1.TotalSize / 1024, 0)
    sReturn = sReturn & “Kb" & vbCrLf
    sReturn = sReturn & “Free Space: " & FormatNumber(drv1.FreeSpace / 1024, 0)
    sReturn = sReturn &“Kb" & vbCrLf
    sReturn = sReturn &“FileSystem:" & drv1.FileSystem & vbCrLf
    MsgBox sReturn
    其中GetDrive方法返回一个与指定路径中的驱动器相对应的 Drive 对象。该方法的语法格式为object.GetDrive drivespec,object是一个FSO对象的名称,drivespec用于指定驱动器的名称。
    按F5运行上述代码,按下TestDrive按钮就会弹出一个消息框显示C盘的信息。
    (三)Folder对象
    在FSO 对象模型中,提供了丰富的有关文件夹操作的方法,这些方法分别是:
    FileSystemObject对象有关文件夹的方法:
    CreateFolder :创建一个文件夹 。
    DeleteFolder:删除一个文件夹 。
    MoveFolder :移动一个文件夹 。
    CopyFolder:复制一个文件夹 。
    FolderExists: 查找一个文件夹是否在驱动器上 。
    GetFolder :获得已有Folder对象的一个实例 。
    GetParentFolderName: 找出一个文件夹的父文件夹的名称。
    GetSpecialFolder: 找出系统文件夹的路径。
    Folder对象的方法:
    Delete :创建一个文件夹 。
    Move :移动一个文件夹 。
    Copy:复制一个文件夹。
    Name:检索文件夹的名称。
    在此需要强调一点,前面我们曾经提到过FSO对象模型包含的方法是冗余的,所以Folder对象的Delete、Move、Copy方法和FileSystemObject对象的DeleteFolder、MoveFolder、CopyFolder方法实际上是相同的,因此在实际使用中可以任选其中的一种。
    和Drive对象一样,下面通过实例演示Folder对象的应用。在VB下新建一个工程,然后在上面添加三个命令按钮,然后在Form1的通用部分加入以下代码:
    Option Explicit
    Dim fsoTest As New FileSystemObject
    Dim folder1 As Folder
    并且分别在三个命令按钮的click事件输入以下代码:
    Private Sub CmdCreate_Click()
    ' 获取 Folder 对象。
    Set folder1 = fsoTest.GetFolder(“C:")
    '创建文件夹
    fsoTest.CreateFolder (“C:\Test")
    MsgBox “folder C:\Test has created"
    End Sub
    Private Sub CmdDelete_Click()
    ' 获取 Drive 对象。
    Set folder1 = fsoTest.GetFolder(“C:")
    '删除文件夹 
    fsoTest.DeleteFolder (“C:\Test")
    MsgBox“folder C:\Test has deleted"
    End Sub
    Private Sub CmdGetPro_Click()
    '获取文件夹的有关信息 
    Dim sReturn As String
    Set folder1 = fsoTest.GetFolder(“C:\Windows")
    'sReturn = “The folder's Attributes is " & folder1.Attributes & vbCrLf
    '获取最近一次访问的时间
    sReturn = sReturn & “The folder's last access time is " & folder1.DateLastAccessed & vbCrLf
    '获取最后一次修改的时间
    sReturn = sReturn & “The folder's last modify time is " & folder1.DateLastModified & vbCrLf
    '获取文件夹的大小
    sReturn = sReturn & “The folder's size is " & FormatNumber(folder1.Size / 1024, 0)
    sReturn = sReturn & “Kb" & vbCrLf
    '判断文件或文件夹类型
    sReturn = sReturn & “The type is " & folder1.Type & vbCrLf
    MsgBox sReturn
    End Sub
    上述代码中提到的CreateFolder方法的语法形式为object.CreateFolder(foldername)。foldername指定了要创建的文件夹的名称,而DeleteFolder方法的语法形式为object.DeleteFolder folderspec[,force],其中,folderspec用来指定要删除的文件夹的名称,force是一个可选的布尔型参数,如果希望删除只读属性的文件夹则将该值设为TRUE,默认为FALSE。至于代码中用到的 Folder 对象的属性限于篇幅,就不详细介绍了,读者可参考VB文档中的相关内容。
    (四)File对象和TextStream对象
    由于有关File对象的复制,删除,移动等操作和Folder对象类似,所以这部分内容就不再重复。这里主要讲述利用File对象和TextStream对象操作文本文件。
    通常对文本文件的操作包括在文本文件中创建数据,在文本文件中添加数据,删除文本文件的数据等操作。这些操作都可以通过File对象和FileSystemObject对象的相关方法完成。不过在使用之前,首先要创建一个文本文件,这可以通过三种方法完成。一种方法是使用FileSystemObject对象的 CreateTextFile 方法。要创建一个空文本文件,可以用以下语句:
    Dim fsoTest As New FileSystemObject, fil1 As File
    Set fil 1= fsoTest.CreateTextFile(“c:\testfile.txt", True)
    第二种方法是使用 FileSystemObject 对象带 ForWriting 标志设置的 OpenTextFile 方法,
    Dim fsoTest As New FileSystemObject, ts1 As New TextStream
    Set ts1 = fsoTest.OpenTextFile(“c:\testfile.txt", ForWriting)
    第三种方法是使用File对象的带 ForWriting 标志设置的 OpenAsTextStream 方法:
    Dim fsoTest As New FileSystemObject, fil 1As File, ts 1As TextStream
    Set fsoTest = CreateObject
      

  11.   

    请问楼上的朋友们,如何声明FileSystemObject对象?
    如果需要进行引用,如何引用?引用什么?
    //需要引用 microsoft script runtime