VB.Net程式設計:快速獲取資料夾/檔名稱程式程式碼

沐NeMo發表於2008-07-04

產品圖片很多而且圖片的名稱都是按貨號命名的。有時候要通過圖片來獲取貨號名稱,想怎麼快速獲取幾百個圖片檔案的名稱呢。於是就寫了這個程式。

 

功能:選擇某一個資料夾,想獲取裡面的檔案的名稱,或者只獲取裡面的資料夾名稱,直接用這個程式。

 

VB.Net 2005,程式介面如:

這裡用到一個控制元件,用起來超級爽。都不用自己寫什麼就可以瀏覽電腦資源了。整個dll檔案才88K。只有用的人才知道:好用啊,做什麼資源管理程式,管理器都可以用這個控制元件了。ExpTree控制元件參考:
http://www.codeproject.com/KB/cpp/VbNetExpTree.aspx

 

快速獲取資料夾/檔名稱程式程式碼:

  1. Imports System.IO
  2. Imports System.Text
  3. Imports System.Resources
  4. Imports System.Reflection
  5. Imports ExpTreeLib
  6. Imports ExpTreeLib.CShItem
  7. Imports ExpTreeLib.SystemImageListManager
  8. 'ExpTree控制元件參考:
  9. 'http://www.codeproject.com/KB/cpp/VbNetExpTree.aspx
  10. Public Class FrmMain
  11.     Dim i As Integer
  12.     Dim CurPath As String
  13.     Public Sub New()
  14.         ' 此呼叫是 Windows 窗體設計器所必需的。
  15.         InitializeComponent()
  16.         ' 在 InitializeComponent() 呼叫之後新增任何初始化。
  17.         SystemImageListManager.SetListViewImageList(lv1, TrueFalse)
  18.         SystemImageListManager.SetListViewImageList(lv1, FalseFalse)
  19.     End Sub
  20.     Private Sub ShowMsg(ByVal Msg As StringOptional ByVal mType As MsgType = MsgType.Ok)
  21.         If mType = MsgType.Ok Then
  22.             Me.LB.ForeColor = Color.Black
  23.             Me.LB.Text = Msg
  24.         Else
  25.             Me.LB.ForeColor = Color.Red
  26.             Me.LB.Text = "出錯:" & Msg
  27.         End If
  28.         Me.LB.Refresh()
  29.     End Sub
  30.     Private Sub SetDirInfo(ByVal info As String)
  31.         Me.LBDirInfo.Text = info
  32.         Me.LBDirInfo.Refresh()
  33.     End Sub
  34.     Private Sub lv1_DoubleClick(ByVal sender As ObjectByVal e As System.EventArgs) Handles lv1.DoubleClick
  35.         ExeLv1Selection()
  36.     End Sub
  37.     Private Sub lv1_DragEnter(ByVal sender As System.ObjectByVal e As System.Windows.Forms.DragEventArgs) Handles lv1.DragEnter
  38.         If e.Data.GetDataPresent(DataFormats.FileDrop) Then
  39.             e.Effect = DragDropEffects.All
  40.         End If
  41.     End Sub
  42.     Private Sub lv1_DragDrop(ByVal sender As System.ObjectByVal e As System.Windows.Forms.DragEventArgs) Handles lv1.DragDrop
  43.         If e.Data.GetDataPresent(DataFormats.FileDrop) Then
  44.             Dim MyFiles() As String
  45.             Dim item As CShItem
  46.             Dim sb As New StringBuilder
  47.             MyFiles = e.Data.GetData(DataFormats.FileDrop)
  48.             Me.TxtBoxMain.Clear()
  49.             For i = 0 To MyFiles.Length - 1
  50.                 item = New CShItem(MyFiles(i))
  51.                 '如果拖放的是硬碟,隱藏檔案,快捷方式,系統檔案,網路硬碟,可行動硬碟就不新增到lv1中。
  52.                 If (item.IsDisk = False And item.IsLink = False And item.IsSystem = False And item.IsNetworkDrive = False And item.IsRemovable = FalseThen
  53.                     Dim lvi As New ListViewItem(item.DisplayName)
  54.                     With lvi
  55.                         .ImageIndex = SystemImageListManager.GetIconIndex(item, False)
  56.                         .Tag = item
  57.                     End With
  58.                     lv1.Items.Add(lvi)
  59.                 End If
  60.             Next
  61.         End If
  62.     End Sub
  63.     Private Sub lv1_KeyDown(ByVal sender As ObjectByVal e As System.Windows.Forms.KeyEventArgs) Handles lv1.KeyDown
  64.         If e.KeyCode = Keys.Enter Then
  65.             ExeLv1Selection()
  66.         ElseIf e.KeyCode = Keys.Delete Then
  67.             If Me.lv1.SelectedItems.Count > 0 Then
  68.                 Me.lv1.Items.RemoveAt(Me.lv1.SelectedIndices(0))
  69.             End If
  70.         End If
  71.     End Sub
  72.     Private Sub ExeLv1Selection()
  73.         If IsNothing(lv1.SelectedItems) OrElse lv1.SelectedItems.Count < 1 Then Exit Sub
  74.         Dim item As CShItem = lv1.SelectedItems(0).Tag
  75.         If item.IsFolder Then
  76.             ExpTree1.ExpandANode(item)
  77.         Else
  78.             Try
  79.                 System.Diagnostics.Process.Start(item.Path)
  80.             Catch ex As Exception
  81.                 Throw New Exception(ex.Message)
  82.             End Try
  83.         End If
  84.     End Sub
  85. #Region " lv1_MouseUp 單擊開啟資料夾"
  86.     'Private Sub lv1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles lv1.MouseUp
  87.     'Dim lvi As ListViewItem = lv1.GetItemAt(e.X, e.Y)
  88.     'If IsNothing(lvi) Then Exit Sub
  89.     'If IsNothing(lv1.SelectedItems) OrElse lv1.SelectedItems.Count < 1 Then Exit Sub
  90.     'Dim item As CShItem = lv1.SelectedItems(0).Tag
  91.     'If item.IsFolder Then
  92.     '    If e.Button = Windows.Forms.MouseButtons.Left Then
  93.     '        ExpTree1.ExpandANode(item)
  94.     '    End If
  95.     'End If
  96.     'End Sub
  97. #End Region
  98.     Private Sub BtClose_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles BtClose.Click
  99.         Me.Close()
  100.         Application.Exit()
  101.     End Sub
  102.     Private Sub BtCopyText_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles BtCopyText.Click
  103.         If Me.TxtBoxMain.Text > String.Empty Then
  104.             System.Windows.Forms.Clipboard.Clear()
  105.             System.Windows.Forms.Clipboard.SetText(Me.TxtBoxMain.Text)
  106.             ShowMsg("文字內容已經複製在系統貼上板中")
  107.         End If
  108.     End Sub
  109.     Private Sub BtCopyList2TxtBox_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles BtCopyList2TxtBox.Click
  110.         GetLvToTxt()
  111.         ShowMsg("共 " & Me.TxtBoxMain.Lines.Length & " 行")
  112.     End Sub
  113.     Private Sub GetLvToTxt()
  114.         Me.TxtBoxMain.Clear()
  115.         Dim sb As StringBuilder
  116.         Dim csi As CShItem
  117.         Dim fln As String
  118.         If Me.lv1.Items.Count > 0 Then
  119.             sb = New StringBuilder
  120.             If Me.ChkBoxIsNeedExt.Checked = True Then
  121.                 For i = 0 To lv1.Items.Count - 1
  122.                     csi = CType(Me.lv1.Items(i).Tag, CShItem)
  123.                     If csi.IsFolder Then
  124.                         sb.Append(csi.DisplayName)
  125.                         sb.AppendLine()
  126.                     Else
  127.                         fln = csi.GetFileName
  128.                         If Me.TxtExtStr.Text > "" Then
  129.                             If Me.RdBtExtAll.Checked = True Then
  130.                                 sb.Append(fln)
  131.                                 sb.AppendLine()
  132.                             End If
  133.                             If Me.RdBtExtFliter.Checked = True Then
  134.                                 If fln.IndexOf(Me.TxtExtStr.Text) = -1 Then
  135.                                     sb.Append(fln)
  136.                                     sb.AppendLine()
  137.                                 End If
  138.                             End If
  139.                             If Me.RdBtExtOnlyGet.Checked = True Then
  140.                                 If fln.IndexOf(Me.TxtExtStr.Text) > -1 Then
  141.                                     sb.Append(fln)
  142.                                     sb.AppendLine()
  143.                                 End If
  144.                             End If
  145.                         Else
  146.                             sb.Append(fln)
  147.                             sb.AppendLine()
  148.                         End If
  149.                     End If
  150.                 Next
  151.             Else
  152.                 For i = 0 To lv1.Items.Count - 1
  153.                     sb.Append(lv1.Items(i).Text)
  154.                     sb.AppendLine()
  155.                 Next
  156.             End If
  157.             Me.TxtBoxMain.Text = sb.ToString
  158.             '減去最後一個空白行。
  159.             Me.TxtBoxMain.Text = Mid(Me.TxtBoxMain.Text, 1, Me.TxtBoxMain.TextLength - 2)
  160.         End If
  161.     End Sub
  162.     Private Sub TxtBoxMain_KeyDown(ByVal sender As System.ObjectByVal e As System.Windows.Forms.KeyEventArgs) Handles TxtBoxMain.KeyDown
  163.         If e.Control = True Then
  164.             If e.KeyCode = Keys.A Then
  165.                 Me.TxtBoxMain.SelectAll()
  166.             ElseIf e.KeyCode = Keys.C Then
  167.                 Me.TxtBoxMain.Copy()
  168.             End If
  169.         End If
  170.     End Sub
  171.     Private Sub BtComBiTxtMain_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles BtComBiTxtMain.Click
  172.         If Me.TxtBoxMain.Text > "" Then
  173.             Me.TxtBoxMain.Text = Replace(Me.TxtBoxMain.Text, Environment.NewLine, ",")
  174.             ShowMsg("共 " & Me.TxtBoxMain.Lines.Length & " 行")
  175.         End If
  176.     End Sub
  177.     Private Sub BtSplitTxtMain_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles BtSplitTxtMain.Click
  178.         If Me.TxtBoxMain.Text > "" Then
  179.             Me.TxtBoxMain.Text = Replace(Me.TxtBoxMain.Text, ",", Environment.NewLine)
  180.             ShowMsg("共 " & Me.TxtBoxMain.Lines.Length & " 行")
  181.         End If
  182.     End Sub
  183.     Private Sub LoadPathInfo(ByVal SelPath As StringByVal CSI As ExpTreeLib.CShItem, ByVal AllFF As ShowFFType)
  184.         Dim dirList As New ArrayList()
  185.         Dim fileList As New ArrayList()
  186.         Dim TotalItems As Integer
  187.         If CSI.DisplayName.Equals(CShItem.strMyComputer) Then
  188.             'avoid re-query since only has dirs
  189.             dirList = CSI.GetDirectories
  190.         Else
  191.             If AllFF = ShowFFType.All Then
  192.                 dirList = CSI.GetDirectories
  193.                 fileList = CSI.GetFiles
  194.             ElseIf AllFF = ShowFFType.Folder Then
  195.                 dirList = CSI.GetDirectories
  196.             ElseIf AllFF = ShowFFType.File Then
  197.                 fileList = CSI.GetFiles
  198.             End If
  199.         End If
  200.         'CSI.Path 如果是系統物件。就放回以::開頭的GUID
  201.         Me.TxtFFPath.Text = SelPath
  202.         CurPath = SelPath
  203.         TotalItems = dirList.Count + fileList.Count
  204.         If TotalItems > 0 Then
  205.             Dim item As CShItem
  206.             dirList.Sort()
  207.             fileList.Sort()
  208.             SetDirInfo("共: " & dirList.Count & " 目錄 " & fileList.Count & " 檔案")
  209.             Dim combList As New ArrayList(TotalItems)
  210.             combList.AddRange(dirList)
  211.             combList.AddRange(fileList)
  212.             'Build the ListViewItems & add to lv1
  213.             lv1.BeginUpdate()
  214.             lv1.Items.Clear()
  215.             lv1.Refresh()
  216.             For Each item In combList
  217.                 Dim lvi As New ListViewItem(item.DisplayName)
  218.                 With lvi
  219.                     'SubItem formatting and adding to lvi omitted from (從...刪除去)article text
  220.                     'Set ListViewItem's IconIndex (and add Icon to lists if necessary)
  221.                     .ImageIndex = SystemImageListManager.GetIconIndex(item, False)
  222.                     .Tag = item
  223.                 End With
  224.                 lv1.Items.Add(lvi)
  225.             Next
  226.             lv1.EndUpdate()
  227.         Else
  228.             lv1.Items.Clear()
  229.             SetDirInfo("0個物件")
  230.         End If
  231.     End Sub
  232.     Private Sub BtOpenFolder_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles BtOpenFolder.Click
  233.         If CurPath > "" Then
  234.             System.Diagnostics.Process.Start(CurPath)
  235.         End If
  236.     End Sub
  237.     Private Sub BtClearnListView_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles BtClearnListView.Click
  238.         Me.lv1.Items.Clear()
  239.         Me.lv1.Refresh()
  240.     End Sub
  241.     Private Sub RdBtShowFF_CheckedChanged(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles RdBtShowAllFF.CheckedChanged, RdBtShowFile.CheckedChanged, RdBtShowFolder.CheckedChanged
  242.         If CurPath > String.Empty Then
  243.             SetDirInfo(String.Empty)
  244.             Try
  245.                 Dim cshi As New CShItem(CurPath)
  246.                 LoadPathInfo(CurPath, cshi, GetShowFFType)
  247.             Catch ex As Exception
  248.                 SetDirInfo("系統物件,無法過濾")
  249.             End Try
  250.         End If
  251.     End Sub
  252.     Private Function GetShowFFType() As ShowFFType
  253.         If Me.RdBtShowAllFF.Checked Then Return ShowFFType.All
  254.         If Me.RdBtShowFolder.Checked Then Return ShowFFType.Folder
  255.         If Me.RdBtShowFile.Checked Then Return ShowFFType.File
  256.         Return ShowFFType.All
  257.     End Function
  258.     Private Sub ExpTree1_ExpTreeNodeSelected(ByVal SelPath As System.StringByVal Item As ExpTreeLib.CShItem) Handles ExpTree1.ExpTreeNodeSelected
  259.         UnCheckFFType()
  260.         LoadPathInfo(SelPath, Item, ShowFFType.All)
  261.     End Sub
  262.     Private Sub UnCheckFFType()
  263.         Me.RdBtShowAllFF.Checked = True
  264.         Me.RdBtShowFolder.Checked = False
  265.         Me.RdBtShowFile.Checked = False
  266.     End Sub
  267.     Private Sub ChkBoxIsNeedExt_CheckedChanged(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles ChkBoxIsNeedExt.CheckedChanged
  268.         If Me.ChkBoxIsNeedExt.CheckState <> CheckState.Checked Then
  269.             Me.RdBtExtAll.Checked = False
  270.             Me.RdBtExtFliter.Checked = False
  271.             Me.RdBtExtOnlyGet.Checked = False
  272.             Me.TxtExtStr.Text = ""
  273.         ElseIf Me.ChkBoxIsNeedExt.CheckState = CheckState.Checked Then
  274.             Me.RdBtExtAll.Checked = True
  275.             Me.TxtExtStr.Text = ""
  276.         End If
  277.     End Sub
  278.     Private Sub BtRefrechFFList_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles BtRefrechFFList.Click
  279.         ExpTree1.RefreshTree()
  280.     End Sub
  281.     Private Sub RdBtExtAll_CheckedChanged(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles RdBtExtAll.CheckedChanged
  282.         If Me.RdBtExtAll.Checked = True Then
  283.             Me.TxtExtStr.Text = ""
  284.         End If
  285.     End Sub
  286.     Private Sub BtClearTxtMain_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles BtClearTxtMain.Click
  287.         Me.TxtBoxMain.Clear()
  288.     End Sub
  289. End Class

相關文章