这样子来判断目录和文件,能不能办到???很复杂!

ypzhsmy 2010-02-20 09:07:54
我有个目录,该目录下有四类东西:
第一类:存在有如“abc.txt”这类文件名是杂乱的文件
第二类:存在有如“def”这类文件夹名是杂乱的文件夹
第三类:存在有如“1.txt 2.txt 6.txt ...”这类文件名是数字排列的文件
第四类:存在有如“2 3 5 ...”这类文件夹名也是数字的文件夹
注意:如果存在 1.txt,就不会存在叫“1”的文件夹了,同样,如果有了名叫“2”的文件夹,就不会出现 2.txt 这个文件了,即文件夹和文件不能同名)


现在能不能做一个判断,前两类不管它,主要是根据后两类来判断的:

如何判断出此时该目录下最大数字的文件名(或文件夹名)是到几了,只要找出最高的那个,不管是文件夹还是文件,有法子办到吗学长们?
...全文
129 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ypzhsmy 2010-02-21
  • 打赏
  • 举报
回复
引用 9 楼 supermanking 的回复:
引用 8 楼 ypzhsmy 的回复:这么长,还有查询子目录的功能,您真有钻研精神,小弟先看看,
这种东西只是把以前的代码改改就可以用了,根本就不用钻研,呵呵

真的行啊,很好用啊,谢谢您这么好的代码,呵呵
现在还是人类 2010-02-20
  • 打赏
  • 举报
回复
引用 8 楼 ypzhsmy 的回复:
这么长,还有查询子目录的功能,您真有钻研精神,小弟先看看,

这种东西只是把以前的代码改改就可以用了,根本就不用钻研,呵呵
ypzhsmy 2010-02-20
  • 打赏
  • 举报
回复
这么长,还有查询子目录的功能,您真有钻研精神,小弟先看看,
现在还是人类 2010-02-20
  • 打赏
  • 举报
回复
上面的程序只用新建一个窗体,然后添加一个按钮,再将上面的代码粘贴上去就可以用了
现在还是人类 2010-02-20
  • 打赏
  • 举报
回复
看看下面的程序,支持深层目录和文件的统计,也可以执行单层或指定目录层的查询

Dim FilesCount As Long
Dim MaxCount As Long
Private Sub Command1_Click()
Msgbox "最大的数是:" & GetFolderMaxCount("C:\ttt", 0) '只查询单层的效果
Msgbox "最大的数是:" & GetFolderMaxCount("C:\ttt", 2) '最多深入查询三层目录查询的效果
Msgbox "最大的数是:" & GetFolderMaxCount("C:\ttt") '查询指定目录里(包含全部子目录)的效果

End Sub
Public Function GetFolderMaxCount(FolderPath As String, Optional RecursionLayer As Long = -1) As Long
MaxCount = 0
GetFolderMaxCount = RecursionFolder(FolderPath, RecursionLayer)
End Function
Private Function RecursionFolder(FolderPath As String, Optional RecursionLayer As Long = -1) As Long
Dim ReturnString As String, ReadAttrib As Long, TempString As String
Dim FolderList() As String, FolderListCount As Long, X As Long
Dim NowNumeric As Long
If Right(FolderPath, 1) <> "\" Then
FolderPath = FolderPath & "\"
End If
ReturnString = Dir(FolderPath, vbDirectory + vbHidden + vbSystem + vbReadOnly)
Do
ReturnString = Dir(, vbHidden + vbSystem + vbReadOnly)
If ReturnString <> "" Then
ReadAttrib = GetAttr(FolderPath & ReturnString)
ReadAttrib = ReadAttrib / (2 ^ 4)
ReadAttrib = ReadAttrib And 1
If ReadAttrib = 1 Then
'属于目录
If ReturnString <> "." And ReturnString <> ".." Then
If IsNumeric(ReturnString) = True Then
'目录属于数字名称
NowNumeric = Int(ReturnString)
If MaxCount < NowNumeric Then
MaxCount = NowNumeric
End If
End If

On Error GoTo NewArray
FolderListCount = UBound(FolderList)
FolderListCount = FolderListCount + 1
ReDim Preserve FolderList(1 To FolderListCount)
GoTo SetArrayValue
NewArray:
FolderListCount = 1
ReDim FolderList(1 To FolderListCount)
SetArrayValue:
FolderList(FolderListCount) = FolderPath & ReturnString

End If
Else
'属于文件
If Len(ReturnString) > 4 Then
If UCase(Right(ReturnString, 4)) = ".TXT" Then
TempString = Left(ReturnString, Len(ReturnString) - 4)
If IsNumeric(TempString) = True Then
'文件名属于数字名称
NowNumeric = Int(TempString)
If MaxCount < NowNumeric Then
MaxCount = NowNumeric
End If
End If
End If
End If
End If
End If
Loop While ReturnString <> ""
On Error GoTo NoFolder
FolderListCount = UBound(FolderList)
For X = 1 To FolderListCount
If RecursionLayer <> -1 Then
If RecursionLayer > 0 Then
Call RecursionFolder(FolderList(X), RecursionLayer - 1)
End If
Else
Call RecursionFolder(FolderList(X), RecursionLayer)
End If
Next X
NoFolder:
RecursionFolder = MaxCount
End Function
ypzhsmy 2010-02-20
  • 打赏
  • 举报
回复
楼上两位的思路,以小弟现有的知识,fzx4936大哥的思路比较好理解,不过具体的代码语法我还要去查查

如果以下面这种思路,为什么得到的结果会是0?

Private Sub Command1_Click()
If Val(Dir1.List(Dir1.ListCount - 1)) > Val(File1.List(File1.ListCount - 1)) Then
MsgBox "最大的数值是" & Dir1.List(Dir1.ListCount - 1) & "的文件夹"
ElseIf Val(Dir1.List(Dir1.ListCount - 1)) < Val(File1.List(File1.ListCount - 1)) Then
MsgBox "最大的数值是" & File1.List(File1.ListCount - 1) & "的文件"
ElseIf Val(Dir1.List(Dir1.ListCount - 1)) = Val(File1.List(File1.ListCount - 1)) Then
MsgBox "最大的数值是" & Val(Dir1.List(Dir1.ListCount - 1)) & "的文件和文件夹"
End If
End Sub

Private Sub Form_Load()
Dir1.Path = "C:\123"
File1.Path = "C:\123"
End Sub



请大侠们再帮忙看看,谢谢了
fzx4936 2010-02-20
  • 打赏
  • 举报
回复
这个不难
1用fso循环读出所有的文件和文件夹
2 用split(s,".")分割文件夹或文件名
3 用val()把它们全变成数值,那非数字的都会变成0
4排序得到最大值
LittlePig 2010-02-20
  • 打赏
  • 举报
回复
写一个思路供参考

先定义一个变量i ‘提示:dim
赋值1
接着验证存不存在文件名为i的文件(夹) ‘这步你会吧? 提示:trim(str(i)),open语句
然后i+1
返回第三步 ‘提示:goto
(不建议用循环,因为不知道最大值)
ypzhsmy 2010-02-20
  • 打赏
  • 举报
回复
引用 1 楼 caozhy 的回复:
正则表达式。...........

小弟不懂这个- -

附加:如果因数字个位不同而更显复杂的话,可以统一下数字,比如文件名可以是001.txt 002.txt 006.txt 文件夹名也可以是 003 004 等
threenewbee 2010-02-20
  • 打赏
  • 举报
回复
正则表达式。...........

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧