rt

解决方案 »

  1.   

    检查目录中的文件  
     
    For  Each  objFile  In  objFolder.Files  
     
    If  UCase$(Right$(objFile.ShortPath,  4))  =  ".GIF"  Then    
     
    这一段是条件检查,但找到的文件是否符合给定的条件,这儿通过取文件名的  
     
    最后4位看是不是“.GIF“来判断文件是否是GIF文件。  
     
    m_lngFileCount  =  m_lngFileCount  +  1  
     
    找到指定条件的文件后进行相应的操作,这儿是把计数器加一。  
     
    End  If  
     
    Next  objFile    
     
    在所有子目录中循环,计数。  
     
    Set  objSubdirs  =  objFolder.SubFolders  
     
    For  Each  objLoopFolder  In  objSubdirs  
     
    CheckFolder  objLoopFolder.Path    
     
    递归调用CheckFolder子过程,实现目录树的遍历。  
     
    Next  objLoopFolder    
     
    Set  objSubdirs  =  Nothing  
     
    Set  objFolder  =  Nothing  
     
     
    End  Sub  
      

  2.   

    可以调用系统的文件属性对话框,不过这个只能显示用,你在程序里如果还想用到统计的数值的话不可以!!也可以用DIR函数进行递归查询!!
      

  3.   

    strDirName = Dir(a, vbDirectory)
         Do While strDirName <> ""
            If strDirName <> "." And strDirName <> ".." Then
                If (GetAttr(a & strDirName ) And vbDirectory) = vbDirectory Then
                    nd = nd + 1
                    Debug.Print strDirName 
                End If
            End If
        Loop
      

  4.   

    写程序的原则是:能用基本控件解决的不要用外部控件,能用VB的基本函数解决的不要用API函数!
    能用API解决的就不要用外部控件.否则安装的时候麻烦一堆!!
      

  5.   

    用  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
      

  6.   

    简单的说,下面的语句可以帮你解决问题:(首先引用Microsoft Scripting Runtime)
    如果你熟悉VB中的集合,那么看起来可以更容易些dim fso as new filesystemobject  '声明,不喜欢写一起可以分开
    dim tgtFolder as Folder  '注意,这里不要new了
    dim tgtSubFolders as folders '注意,这里也不要new了set tgtFolder=fso.GetFolder(folderspec)  '返回一个和指定路径中文件夹相对应的Folder 对象。其中folderspec是绝对路径set tgtSubFolders=tgtFolder.subfolders  '得到目标目录下所有的子目录,保存在集合tgtSubFolders中。需要用的时候,可以用下面的方式访问和遍历。dim fdr as folder  '注意,不要new了'遍历:
    for each fdr in tgtSubFolders
      if fdr.name=... then ...  'fdr.name是目录名,不包含路径
      if fdr.path=... then ...  'fdr.path是绝对路径
    next fdr'如果已经记下了某个目录在tgtSubFolders中的Key(或者Index)
    可以用 set fdr=tgtSybFolders(Key/Index)的格式访问
    更详细的情况,请参阅msdn中“filesystemobject 对象“(特别是“GetFolder方法“),以及“Folder 对象“(特别是“SubFolders属性“),以及“集合“。
      

  7.   

    Private Sub Command1_Click()
        Dim fs As New FileSystemObject  ' 建立 FileSystemObject
        Dim fd As Folder    ' 定义 Folder 对象
        Dim sfd As Folder    Set fd = fs.GetFolder("c:\")
        Command1.Enabled = False
        Screen.MousePointer = vbHourglass
        FindFile fd, Text1.Text
        Command1.Enabled = True
        Screen.MousePointer = vbDefault
    End SubSub FindFile(fd As Folder, FileName As String)
        Dim sfd As Folder, f As File    ' Part I查找该文件夹的所有文件
        For Each f In fd.Files
            Debug.Print f.Path
            List1.AddItem f.Path
            DoEvents
        Next    ' Part II循环查找所有子文件夹
        For Each sfd In fd.SubFolders
            FindFile sfd, FileName  ' 循环查找
        Next
    End Sub