| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1093 人关注过本帖
标题:VB列举文件名的问题
只看楼主 加入收藏
linandceline
Rank: 2
等 级:论坛游民
威 望:2
帖 子:88
专家分:47
注 册:2014-12-19
结帖率:78.95%
收藏
已结贴  问题点数:20 回复次数:14 
VB列举文件名的问题
1、我的目的是列举文件夹包括子文件夹下面的文件,

2、以下代码,检测路径Mypath为本地硬盘路径时测试没有问题,如D:\COUNT
     但是用网络路径测试就有问题, 如\\192.168.1.2\COUNT

3、求大神指正

Sub Cfile1(MyPath As String)
Dim Myname As String
Dim a As String
Dim B() As String
Dim dir_i() As String
Dim i, m, n, idir As Long

If Right(MyPath, 1) <> "\" Then MyPath = MyPath + "\"
Myname = Dir(MyPath, vbDirectory Or vbHidden Or vbNormal Or vbReadOnly)

Do While Myname <> ""
  If Myname <> "." And Myname <> ".." Then
    If (GetAttr(MyPath & Myname) And vbDirectory) = vbDirectory Then '提示错误的行
      idir = idir + 1
      ReDim Preserve dir_i(idir) As String
      dir_i(idir - 1) = Myname
    Else
      List3.AddItem Myname   
      List7.AddItem FileDateTime(MyPath & Myname)
    End If
  End If
  Myname = Dir
Loop
For i = 0 To idir - 1

Call Cfile1(MyPath + dir_i(i))
Next i
ReDim dir_i(0) As String
搜索更多相关主题的帖子: 文件夹 检测 网络 
2014-12-19 16:53
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:7 
如果你前面dir(网络路径)执行正常,而GetAttr出错,则可能是权限问题,你可以在网络机上用net user命令建立一个超级用户试试。
net user 主机用户名 密码 /add
net localgroup administrators 主机用户名 /add
2014-12-19 19:43
linandceline
Rank: 2
等 级:论坛游民
威 望:2
帖 子:88
专家分:47
注 册:2014-12-19
收藏
得分:0 
权限是没有问题的
而且我曾有另一个程序,一样是监控网络路径,只是路径稍有不同
2014-12-20 09:30
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:0 
可不可以提供多点信息,如是什么错误提示,出现错误时MyPath & Myname值。
2014-12-20 11:15
linandceline
Rank: 2
等 级:论坛游民
威 望:2
帖 子:88
专家分:47
注 册:2014-12-19
收藏
得分:0 
实时错误52
错误的文件名或号码
2014-12-20 15:46
linandceline
Rank: 2
等 级:论坛游民
威 望:2
帖 子:88
专家分:47
注 册:2014-12-19
收藏
得分:0 
回复 5楼 linandceline
补充:实际路径有中文名,但是我的其他程序也是一样可以执行
2014-12-20 15:49
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:0 
没有调试环境,无法解答你的问题。如果你觉得是字符问题,你可以试着加引号试试,语句为If (GetAttr(chr(34) & MyPath & Myname & chr(34)) And vbDirectory) = vbDirectory Then '提示错误的行。如果还不行的话,建议查查网络文件所在主机共享设置问题,如果你觉得你在本地盘的情况下正常,你可以将网络盘直接映射为本地盘试下。
2014-12-21 17:00
linandceline
Rank: 2
等 级:论坛游民
威 望:2
帖 子:88
专家分:47
注 册:2014-12-19
收藏
得分:0 
以下是全部代码
Dim y As Integer
Sub Cfile1(MyPath As String)
Dim Myname As String
Dim a As String
Dim B() As String
Dim dir_i() As String
Dim i, m, n, idir As Long

If Right(MyPath, 1) <> "\" Then MyPath = MyPath + "\"
Myname = Dir(MyPath, vbDirectory Or vbHidden Or vbNormal Or vbReadOnly)

Do While Myname <> ""
  If Myname <> "." And Myname <> ".." Then
    If (GetAttr(MyPath & Myname) And vbDirectory) = vbDirectory Then '如果找到的是目录
      idir = idir + 1
      ReDim Preserve dir_i(idir) As String
      dir_i(idir - 1) = Myname
    Else
      List3.AddItem Myname   '把找到的文件显示到列表框中
      List7.AddItem FileDateTime(MyPath & Myname)
      List9.AddItem MyPath
    End If
  End If
  Myname = Dir '搜索下一项
Loop

For i = 0 To idir - 1
Call Cfile1(MyPath + dir_i(i))
Next i
ReDim dir_i(0) As String

List1.Clear
For m = 0 To (List3.ListCount - 1)
  If InStr(List3.List(m), ".") > 0 Then
    n = Len(Left(List3.List(m), InStr(List3.List(m), ".")))
    List1.AddItem Left(List3.List(m), n - 1)
  End If
Next

List5.Clear
For i = 0 To (List7.ListCount - 1)
  List5.AddItem List3.List(i) & " " & List7.List(i)
Next

End Sub
Sub Cfile2(MyPath As String)
Dim Myname As String
Dim a As String
Dim B() As String
Dim dir_i() As String
Dim i, m, n, idir As Long

If Right(MyPath, 1) <> "\" Then MyPath = MyPath + "\"
Myname = Dir(MyPath, vbDirectory Or vbHidden Or vbNormal Or vbReadOnly)

Do While Myname <> ""
  If Myname <> "." And Myname <> ".." Then
    If (GetAttr(MyPath & Myname) And vbDirectory) = vbDirectory Then '如果找到的是目录
      idir = idir + 1
      ReDim Preserve dir_i(idir) As String
      dir_i(idir - 1) = Myname
    Else
      List4.AddItem Myname   '把找到的文件显示到列表框中
      List8.AddItem FileDateTime(MyPath & Myname)
      List10.AddItem MyPath
    End If
  End If
  Myname = Dir '搜索下一项
Loop

For i = 0 To idir - 1
Call Cfile2(MyPath + dir_i(i))
Next i
ReDim dir_i(0) As String

List2.Clear
For m = 0 To (List4.ListCount - 1)
  If InStr(List4.List(m), ".") > 0 Then
    n = Len(Left(List4.List(m), InStr(List4.List(m), ".")))
    List2.AddItem Left(List4.List(m), n - 1)
  End If
Next

List6.Clear
For i = 0 To (List8.ListCount - 1)
  List6.AddItem List4.List(i) & " " & List8.List(i)
Next

End Sub
Sub Sentense()
List2.Clear
List4.Clear
List6.Clear
List8.Clear
List10.Clear
Cfile2 ("D:\count\")
Dim i, j, k As Integer
For i = 0 To (List4.ListCount - 1)
  For j = 0 To (List3.ListCount - 1)
    If List4.List(i) = List3.List(j) Then Exit For
  Next
  If j = List3.ListCount Then
    MsgBox "新发放文件" & vbCrLf & List2.List(i) & vbCrLf & vbCrLf & "发放时间" & vbCrLf & List8.List(i) & vbCrLf & vbCrLf & "文件路径:" & vbCrLf & List10.List(i), 64, "提醒"
  End If
Next

For i = 0 To (List3.ListCount - 1)
  For j = 0 To (List4.ListCount - 1)
    If List3.List(i) = List4.List(j) Then Exit For
  Next
  If j = List4.ListCount Then
    MsgBox "以下文件已删除" & vbCrLf & List1.List(i), 64, "提醒"
  End If
Next

For i = 0 To (List4.ListCount - 1)
  For j = 0 To (List3.ListCount - 1)
    If List4.List(i) = List3.List(j) Then
      If List10.List(i) = List9.List(j) Then
        If List8.List(i) <> List7.List(j) Then
          MsgBox "以下文件有更新" & vbCrLf & List2.List(i) & vbCrLf & vbCrLf & "更新时间" & vbCrLf & List8.List(i) & vbCrLf & vbCrLf & "文件路径:" & vbCrLf & List10.List(i), 64, "提醒"
        End If
      End If
    End If
  Next
Next

List1.Clear
List3.Clear
List5.Clear
List7.Clear
List9.Clear
Cfile1 ("D:\count\")
End Sub
Private Sub Form_Load()

List1.Clear
List3.Clear
List5.Clear
List7.Clear
Cfile1 ("D:\count\")
Timer1.Interval = 1000
End Sub
Private Sub Timer1_Timer()
y = y + 1
If y = 10 Then
y = 0
Call Sentense
End If
End Sub
2014-12-22 10:02
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:737
专家分:3488
注 册:2013-1-26
收藏
得分:7 
试试...
把count文件夹网络共享后就可以了。


[ 本帖最后由 lianyicq 于 2014-12-22 10:41 编辑 ]

大开眼界
2014-12-22 10:20
linandceline
Rank: 2
等 级:论坛游民
威 望:2
帖 子:88
专家分:47
注 册:2014-12-19
收藏
得分:0 
回复 9楼 lianyicq
D:的路径只是一个测试路径,如果在本地测试没有问题了,我就改成网络路径再测试
实际需求的,仅是网络路径而已
2014-12-22 10:53
快速回复:VB列举文件名的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.040951 second(s), 11 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved