在工作当中看到有时会用到路径生成工具生成路径文件。在业余时间我试着做了一个,以下是核心代码。
Imports System.Text
Imports System.IO
Public Class GetXLSFile
Public psTestStr As New StringBuilder()
Public ReadOnly STR_MIDDLE As String = " ├─"
Public ReadOnly STR_OVER As String = " └─"
Public ReadOnly STR_JOIN As String = " │"
Public ReadOnly STR_SPLIT As String = ","
Public ReadOnly STR_SPACE As String = " "
Private Sub WritePathName(ByVal asSubDir As String, ByVal asSpaceFile As String)
Dim lsSpaceFile As String = String.Empty
Dim liDirCnt As Integer = 0
Dim lsSubPathNames() As String = Nothing
For Each lsSubDir As String In Directory.GetDirectories(asSubDir)
psTestStr.Append(asSpaceFile & STR_JOIN & STR_SPLIT & asSpaceFile)
If liDirCnt >= Directory.GetDirectories(asSubDir).GetLength(0) - 1 AndAlso _
Directory.GetFiles(asSubDir).GetLength(0) <= 0 Then
psTestStr.Append(STR_OVER)
lsSpaceFile = asSpaceFile & STR_SPACE
Else
psTestStr.Append(STR_MIDDLE)
lsSpaceFile = asSpaceFile & STR_JOIN
End If
lsSubPathNames = lsSubDir.Split("/")
psTestStr.Append(lsSubPathNames(lsSubPathNames.Length - 1)).Append(STR_SPLIT)
WritePathName(lsSubDir, lsSpaceFile)
liDirCnt += 1
Next
WriteFileName(asSubDir, asSpaceFile)
End Sub
Private Sub WriteFileName(ByVal asSubDir As String, ByVal asSpace As String)
Dim liCnt As Integer = 0
For Each lsFilePath As String In Directory.GetFiles(asSubDir)
psTestStr.Append(asSpace)
If liCnt = 0 Then psTestStr.Append(STR_JOIN & STR_SPLIT & asSpace)
If liCnt >= Directory.GetFiles(asSubDir).GetLength(0) - 1 Then
psTestStr.Append(STR_OVER)
Else
psTestStr.Append(STR_MIDDLE)
End If
Dim lsFilePathNames() As String = lsFilePath.Split("/")
psTestStr.Append(lsFilePathNames(lsFilePathNames.Length - 1)).Append(STR_SPLIT)
liCnt += 1
Next
End Sub
Public Sub WriteToExcel(ByVal asPath As String, ByVal asFileName As String)
If File.Exists(asFileName) Then File.Delete(asFileName)
psTestStr.Append(asPath & STR_SPLIT)
WritePathName(asPath, String.Empty)
Dim loFile As New FileStream(asFileName, FileMode.CreateNew, FileAccess.Write, FileShare.None)
Dim loWriter As New StreamWriter(loFile)
Try
Dim lsTemp() As String = psTestStr.ToString().Split(STR_SPLIT)
For Each lsStr As String In lsTemp
loWriter.WriteLine(lsStr.ToCharArray())
Next
Finally
loWriter.Close()
loFile.Close()
End Try
End Sub
End Class
生成实例结果如下:
D:/Document/Visual Studio 2005
│
├─Templates
│ │
│ ├─ProjectTemplates
│ │ │
│ │ ├─Visual C#
│ │ │
│ │ ├─Visual Basic
│ │ │
│ │ └─Visual Web Developer
│ │
│ └─ItemTemplates
│ │
│ ├─Visual C#
│ │
│ ├─Visual Basic
│ │
│ └─Visual Web Developer
│
├─Projects
│ │
│ └─VSMacros80
│ │
│ ├─MyMacros
│ │
│ └─Samples
│ │
│ └─Samples.vsmacros
│
├─Settings
│ │
│ └─CurrentSettings.vssettings
│
├─Code Snippets
│ │
│ ├─Visual Basic
│ │ │
│ │ └─My Code Snippets
│ │
│ ├─Visual C#
│ │ │
│ │ └─My Code Snippets
│ │
│ ├─Visual J#
│ │ │
│ │ └─My Code Snippets
│ │
│ └─XML
│ │
│ └─My Xml Snippets
│
├─Visualizers
│ │
│ ├─autoexp.cs
│ ├─autoexp.dll
│ ├─autoexpce.cs
│ ├─autoexpce.dll
│ └─attribcache80.bin
│
└─Backup Files
│
└─testBitVector32