微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

VB.NET迭代文件和目录

@H_502_2@
我正在研究一个VB.NET程序,它会自动将我的工作备份到我的FTP服务器上.到目前为止,我可以通过使用以下方法指定文件名来上传单个文件

'relevant part - above is where FTP object is instantiated
       Dim _FileStream As System.IO.FileStream = _FileInfo.OpenRead()

            Try
                'Stream to which the file to be upload is written
                Dim _Stream As System.IO.Stream = _FtpWebRequest.GetRequestStream()

                'Read from the file stream 2kb at a time
                Dim contentLen As Integer = _FileStream.Read(buff,buffLength)

                'Till Stream content ends
                do while contentLen <> 0
                    ' Write Content from the file stream to the FTP Upload Stream
                    _Stream.Write(buff,contentLen)
                    contentLen = _FileStream.Read(buff,buffLength)
                Loop
                _Stream.Close()
                _Stream.dispose()
                _FileStream.Close()
                _FileStream.dispose()

                ' Close the file stream and the Request Stream


            Catch ex As Exception
                MessageBox.Show(ex.Message,"Upload Error",MessageBoxButtons.OK,MessageBoxIcon.Error)
            End Try

现在我希望能够遍历目录(包含子目录)并递归调用上面的函数.我在获取目录中的文件时遇到问题.

我的问题是,我如何循环并将每个文件发送到上面的上传功能?我可以将文件名发送到数组,还是有某种系统对象来处理这个(例如System.IO.Directory)

我正在尝试做的伪代码

For Each Sub_directory In Source_directory

                     For Each File in Directory
                       'call the above code to transfer the file
                     Next

                'start next subdirectory
                Next

我正在尝试复制整个目录结构,子目录完好无损.我的第一次尝试将所有文​​件转储到一个目录中.

@H_502_2@

解决方法

您可以使用递归遍历每个目录和文件,如下所示:

Public Shared Sub ForEachFileAndFolder(ByVal sourceFolder As String,_
                                       ByVal directoryCallBack As Action(Of DirectoryInfo),_
                                       ByVal fileCallBack As Action(Of FileInfo))

    If Directory.Exists(sourceFolder) Then
        Try
            For Each foldername As String In Directory.GetDirectories(sourceFolder)
                If directoryCallBack IsNot nothing Then
                    directoryCallBack.Invoke(New DirectoryInfo(foldername))
                End If

                ForEachFileAndFolder(foldername,directoryCallBack,fileCallBack)
            Next
        Catch ex As UnauthorizedAccessException
            Trace.TraceWarning(ex.Message)
        End Try

        If fileCallBack IsNot nothing
            For Each filename As String In Directory.GetFiles(sourceFolder)
                fileCallBack.Invoke(New FileInfo(filename))
            Next
        End If
    End If
End Sub

编辑:代表的用法

ForEachFileAndFolder("yourPath",AddressOf dirAction,Addressof fileAction)

Public Sub dirAction(Byval dirInfo As DirectoryInfo)
    ' do something here '
End Sub

FileAction也是如此.

@H_502_2@ @H_502_2@
@H_502_2@
@H_502_2@

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐