当前位置:编程学习 > VB >>

关于VB无穷创建文件夹问题

Private Sub Command2_Click()
Dim SDurl As String
Dim SDnum As String
Dim SDtype As String
 SDnum = 1
 
 If SDnum = 1 Then
 SDurl = Me!Folder.Text + SDnum
 SDnum = SDnum + 1
 ElseIf SDnum > 1 And SDnum <= Me!SDSD.Text Then
 SDurl = SDurl + "\" + Me!Folder.Text + SDnum
 SDnum = SDnum + 1
 End If
 MkDir Me!Address.Text + SDurl
End Sub

Me!SDSD.Text 对应的内容为99 Me!Address.Text对应的内容c:\ Me!Folder.Text 对应的是文件夹名称:2009
我的意思是想在C盘创建99层子文件夹 初始文件夹名称为20091 然后是20092
关系是c:\20091\20092\20093\20094 这种
可是上面的代码只实现了2两层的创建 也就是我不知道如何让它像C一样RETURN; 或则使用 while 
我的VB学习很盲目,对这些语法了解并不清楚,不知道大家能不能帮我解决下这个难题。
谢谢啦2 --------------------编程问答--------------------

'创建目录
Private Declare Function CreateDirectory Lib "kernel32" Alias "CreateDirectoryA" (ByVal lpPathName As String, lpSecurityAttributes As SECURITY_ATTRIBUTES) As Long
Private Type SECURITY_ATTRIBUTES
    nLength As Long
    lpSecurityDescriptor As Long
    bInheritHandle As Long
End Type

Public Function CreateNewDirectory(NewDirectory As String) As String
    Dim sDirTest As String
    Dim SecAttrib As SECURITY_ATTRIBUTES
    Dim bSuccess As Boolean
    Dim sPath As String
    Dim iCounter As Integer
    Dim sTempDir As String
    Dim iFlag As Integer
    iFlag = 0
    sPath = NewDirectory

    If Mid(sPath, Len(sPath) - 1) <> "\" Then
        sPath = sPath & "\"
    End If

    iCounter = 1
    Do Until InStr(iCounter, sPath, "\") = 0
        iCounter = InStr(iCounter, sPath, "\")
        sTempDir = Mid(sPath, 1, iCounter)
        sDirTest = Dir(sTempDir)
        iCounter = iCounter + 1

        SecAttrib.lpSecurityDescriptor = &O0
        SecAttrib.bInheritHandle = False
        SecAttrib.nLength = Len(SecAttrib)
        bSuccess = CreateDirectory(sTempDir, SecAttrib)
    Loop
    CreateNewDirectory = NewDirectory
End Function
--------------------编程问答-------------------- 这个代码好高级啊,看的不大懂 也没注释 很费解,不过还是感谢你 我调试下看看 --------------------编程问答-------------------- 代码不会用。。 --------------------编程问答-------------------- Call CreateNewDirectory("C:\AAA\BBB\CCC\DDD\EEE\FFF") --------------------编程问答-------------------- 好激动啊,原来这么神奇,比我那方便多了,非常感谢你!这个方法太实用了。 --------------------编程问答-------------------- 可是如何做到
如果
SDurl = c:\
i<99;i++
SDurl = SDurl + "\" + Me!Folder.Text + SDnum 
这样循环一直到I=98时SDurl等于98个文件夹相加呢?
这样搭配你那语句 就更方便了 --------------------编程问答-------------------- Dim SDurl As String 
Dim SRoot as String
Dim SLoop as String
Dim i as integer
SDurl =""
SLoop =""
SRoot=c:\(Me!Address.Text)
for i=1 to 98(Me!SDSD.Text)
    if i=1 then
       SDurl= SRoot & Me!Folder.Text (2009) & cstr(i)
    else
       SLoop=""
       SLoop=Me!Folder.Text (2009) & cstr(i)
       SDurl=SDurl & "\" & SLoop
    end if
    Call CreateNewDirectory(SDurl)'创建文件夹
next
楼主这个应该是你要的结果吧! --------------------编程问答-------------------- 我现在把 代码改成这样了 
Private Sub Command2_Click()
Dim SDurl As String
Dim SLoop As String
Dim i As Integer
For i = 1 To Me!SDSD.Text
    If i = 1 Then
      SDurl = Me!Address.Text + Me!Folder.Text + CStr(i)
    Else
      SLoop = Me!Folder.Text + CStr(i)
      SDurl = SDurl & "\" & SLoop
    End If
Next
    Call CreateNewDirectory(SDurl) '创建文件夹
    MsgBox "创建完毕"
End Sub
也能创建 但是只能创24个文件夹 
然后提示无效过程调用或参数
        sDirTest = Dir(sTempDir)(代码在2楼)
然后我把文件夹名字改为1 就能创建62个文件夹
我认为是sTempDir能接受的字符串太少 怎么修改啊 
--------------------编程问答-------------------- 上面的这个问题真的没人走到吗? --------------------编程问答-------------------- 上面的这个问题真的没人知道吗? --------------------编程问答-------------------- 你的程序在Dir函数 出了问题。

-------------------------------------------------------------------------------- 

返回一个 String,用以表示一个文件名、目录名或文件夹名称,它必须与指定的模式或文件属性、或磁盘卷标相匹配。 

语法 

Dir[(pathname[, attributes])] 

Dir 函数的语法具有以下几个部分: 

部分 描述 
pathname 可选参数。用来指定文件名的字符串表达式,可能包含目录或文件夹、以及驱动器。如果没有找到 pathname,则会返回零长度字符串 ("")。 
attributes 可选参数。常数或数值表达式,其总和用来指定文件属性。如果省略,则会返回匹配 pathname 但不包含属性的文件。 


设置值 

attributes 参数的设置可为: 

常数 值 描述 
vbNormal 0 (缺省) 指定没有属性的文件。 
vbReadOnly 1 指定无属性的只读文件 
vbHidden 2 指定无属性的隐藏文件 
VbSystem 4 指定无属性的系统文件 
vbVolume 8 指定卷标文件;如果指定了其它属性,则忽略vbVolume 
vbDirectory 16 指定无属性文件及其路径和文件夹。 


注意 这些常数是由 VBA 所指定的,在程序代码中的任何位置,可以使用这些常数来替换真正的数值。 

说明 

Dir 支持多字符 (*) 和单字符 (?) 的通配符来指定多重文件。 

由于 Macintosh 不支持通配符,使用文件类型指定文件组。可以使用 MacID 函数指定文件类型而不用文件名。比如,下列语句返回当前文件夹中第一个TEXT文件的名称: 

Dir("SomePath", MacID("TEXT")) 

为选中文件夹中所有文件,指定一空串: 

Dir("") 

在 Microsoft Windows 中,如果在Dir函数中使用MacID函数,将产生错误。 

任何大于256的attribute值都被认为是MacID 函数的值。 

在第一次调用 Dir 函数时,必须指定 pathname,否则会产生错误。如果也指定了文件属性,那么就必须包括 pathname。 

Dir 会返回匹配 pathname 的第一个文件名。若想得到其它匹配 pathname 的文件名,再一次调用 Dir,且不要使用参数。如果已没有合乎条件的文件,则 Dir 会返回一个零长度字符串 ("")。一旦返回值为零长度字符串,并要再次调用 Dir 时,就必须指定 pathname,否则会产生错误。不必访问到所有匹配当前 pathname 的文件名,就可以改变到一个新的 pathname 上。但是,不能以递归方式来调用 Dir 函数。以 vbDirectory 属性来调用 Dir 不能连续地返回子目录。 

提示 由于文件名并不会以特别的次序来返回,所以可以将文件名存储在一个数组中,然后再对这个数组排序。 --------------------编程问答-------------------- 受操作系统限制文件目录长度最大为小于255个字符
所以你这种设计本身就存在问题
c:\20091\20092\20093每深入一层目录就增加6个字符,所以这样的目录最多只能创建不到50层 --------------------编程问答-------------------- 楼上说得对。文件夹深度受到最底层文件夹名字长度的限制。楼上朋友们的方法, 一是用系统API来实现,如Modest 的方法,二是使用MK等好理解的命令。都需要加上循环。思路上其实并不难。
补充:VB ,  基础类
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,