VB.Net/File Directory/Directory

Материал из VB Эксперт
Перейти к: навигация, поиск

Directory Information: name, last update and create time

<source lang="vbnet"> Imports System.IO Module Module1

   Sub Main()
           Dim Dir As New DirectoryInfo("C:\WINNT\Temp")
           Console.WriteLine("Full name: {0}", Dir.FullName)
           Console.WriteLine("Creation time: {0}", Dir.CreationTime)
           Console.WriteLine("Last access time: {0}", Dir.LastAccessTime)
           Console.WriteLine("Last write time: {0}", Dir.LastWriteTime)
   End Sub

End Module


      </source>


Directory Separator

<source lang="vbnet"> Imports System.IO Module Module1

   Sub Main()
       Console.WriteLine("Directory Separator {0}", Path.DirectorySeparatorChar)
   End Sub

End Module


      </source>


Display all file under a Directory

<source lang="vbnet"> Imports System Imports System.IO Public Class MainClass

  Shared Sub Main()
        Dim fileName As String
        fileName = "C:\"
        
           Dim directoryList As String() " array for directories
           Dim i As Integer
           directoryList = Directory.GetDirectories(fileName)
           Console.WriteLine("Directory contents:" )
           " output directoryList contents
           For i = 0 To directoryList.Length - 1
              Console.WriteLine( directoryList(i) )
           Next
  End Sub " Main

End Class


      </source>


Display Directory Tree

<source lang="vbnet"> Imports System.IO Module Module1

   Sub DisplayTree(ByVal Dir As String)
       Dim Files As String() = Directory.GetFiles(Dir)
       Dim Dirs As String() = Directory.GetDirectories(Dir)
       Dim Filename As String
       For Each Filename In Files
           Console.WriteLine(Filename)
       Next
       Dim DirectoryName As String
       For Each DirectoryName In Dirs
           DisplayTree(DirectoryName)
       Next
   End Sub
   Sub Main()
       DisplayTree("C:\")
   End Sub

End Module


      </source>


Find a file: search directory recursively

<source lang="vbnet"> Imports System Imports System.Windows.Forms Imports System.IO Imports System.Text.RegularExpressions Imports System.Collections.Specialized Public Class MainClass

  Shared Sub Main()
       Dim myform As Form = New FrmFileSearch()
       Application.Run(myform)
  End Sub " Main

End Class

Public Class FrmFileSearch

  Inherits Form
  " label that displays current directory
  Friend WithEvents lblDirectory As Label
  " label that displays directions to user
  Friend WithEvents lblDirections As Label
  " button that activates search
  Friend WithEvents cmdSearch As Button
  " text boxes for inputting and outputting data
  Friend WithEvents txtInput As TextBox
  Friend WithEvents txtOutput As TextBox
  1. Region " Windows Form Designer generated code "
  Public Sub New()
     MyBase.New()
     "This call is required by the Windows Form Designer.
     InitializeComponent()
     "Add any initialization after the InitializeComponent() call
  End Sub
  "Form overrides dispose to clean up the component list.
  Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
     If disposing Then
        If Not (components Is Nothing) Then
           components.Dispose()
        End If
     End If
     MyBase.Dispose(disposing)
  End Sub
  "Required by the Windows Form Designer
  Private components As System.ruponentModel.Container
  "NOTE: The following procedure is required by the Windows Form Designer
  "It can be modified using the Windows Form Designer.  
  "Do not modify it using the code editor.
  <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
     Me.txtOutput = New System.Windows.Forms.TextBox()
     Me.lblDirections = New System.Windows.Forms.Label()
     Me.lblDirectory = New System.Windows.Forms.Label()
     Me.txtInput = New System.Windows.Forms.TextBox()
     Me.cmdSearch = New System.Windows.Forms.Button()
     Me.SuspendLayout()
     "
     "txtOutput
     "
     Me.txtOutput.AutoSize = False
     Me.txtOutput.BackColor = System.Drawing.SystemColors.Control
     Me.txtOutput.Location = New System.Drawing.Point(20, 276)
     Me.txtOutput.Multiline = True
     Me.txtOutput.Name = "txtOutput"
     Me.txtOutput.ReadOnly = True
     Me.txtOutput.ScrollBars = System.Windows.Forms.ScrollBars.Vertical
     Me.txtOutput.Size = New System.Drawing.Size(461, 208)
     Me.txtOutput.TabIndex = 4
     Me.txtOutput.Text = ""
     "
     "lblDirections
     "
     Me.lblDirections.Font = New System.Drawing.Font("Microsoft Sans Serif", 10.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
     Me.lblDirections.Location = New System.Drawing.Point(20, 138)
     Me.lblDirections.Name = "lblDirections"
     Me.lblDirections.Size = New System.Drawing.Size(451, 20)
     Me.lblDirections.TabIndex = 1
     Me.lblDirections.Text = "Enter Path to Search:"
     "
     "lblDirectory
     "
     Me.lblDirectory.Font = New System.Drawing.Font("Microsoft Sans Serif", 10.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
     Me.lblDirectory.Location = New System.Drawing.Point(20, 20)
     Me.lblDirectory.Name = "lblDirectory"
     Me.lblDirectory.Size = New System.Drawing.Size(451, 98)
     Me.lblDirectory.TabIndex = 0
     Me.lblDirectory.Text = "Current Directory:"
     "
     "txtInput
     "
     Me.txtInput.Location = New System.Drawing.Point(20, 168)
     Me.txtInput.Name = "txtInput"
     Me.txtInput.Size = New System.Drawing.Size(461, 22)
     Me.txtInput.TabIndex = 3
     Me.txtInput.Text = ""
     "
     "cmdSearch
     "
     Me.cmdSearch.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
     Me.cmdSearch.Location = New System.Drawing.Point(20, 217)
     Me.cmdSearch.Name = "cmdSearch"
     Me.cmdSearch.Size = New System.Drawing.Size(461, 40)
     Me.cmdSearch.TabIndex = 2
     Me.cmdSearch.Text = "Search Directory"
     "
     "FrmFileSearch
     "
     Me.AutoScaleBaseSize = New System.Drawing.Size(6, 15)
     Me.ClientSize = New System.Drawing.Size(501, 499)
     Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.txtOutput, Me.txtInput, Me.cmdSearch, Me.lblDirections, Me.lblDirectory})
     Me.Name = "FrmFileSearch"
     Me.Text = "Using Regular Expressions"
     Me.ResumeLayout(False)
  End Sub
  1. End Region
  Dim currentDirectory As String = Directory.GetCurrentDirectory
  Dim directoryList As String()
  Dim fileArray As String() 

  Dim found As NameValueCollection = New NameValueCollection()
 
  Private Sub txtInput_KeyDown(ByVal sender As System.Object, _
     ByVal e As System.Windows.Forms.KeyEventArgs) _
     Handles txtInput.KeyDown
   
     If (e.KeyCode = Keys.Enter) Then
        cmdSearch_Click(sender, e)
     End If
  End Sub 

  Private Sub cmdSearch_Click(ByVal sender As System.Object, _
     ByVal e As System.EventArgs) Handles cmdSearch.Click
     Dim current As String
   
     If txtInput.Text <> "" Then
        " verify that user input is a valid directory name
        If Directory.Exists(txtInput.Text) Then
           currentDirectory = txtInput.Text
           " reset input text box and update display
           lblDirectory.Text = "Current Directory:" & vbCrLf & _
             currentDirectory
           " show error if user does not specify valid directory
        Else
           MessageBox.Show("Invalid Directory", "Error", _
              MessageBoxButtons.OK, MessageBoxIcon.Error)
           Return
        End If
     End If
     " clear text boxes
     txtInput.Text = ""
     txtOutput.Text = ""
     " search directory
     SearchDirectory(currentDirectory)
     " summarize and print results
     For Each current In found
        txtOutput.Text &= "* Found " & found(current) & " " _
           & current & " files." & vbCrLf
     Next
     " clear output for new search
     found.Clear()
  End Sub " cmdSearch_Click
  " search directory using regular expression
  Private Sub SearchDirectory(ByVal currentDirectory As String)
     " for file name without directory path
     Try
        Dim fileName As String = ""
        Dim myFile As String
        Dim myDirectory As String
        " regular expression for extensions matching pattern
        Dim regularExpression As Regex = _
           New Regex("([a-zA-Z0-9]+\.(?<extension>\w+))")
        " stores regular-expression-match result 
        Dim matchResult As Match
        Dim fileExtension As String " holds file extensions
        " number of files with given extension in directory
        Dim extensionCount As Integer
        " get directories
        directoryList = _
           Directory.GetDirectories(currentDirectory)
        " get list of files in current directory
        fileArray = Directory.GetFiles(currentDirectory)
        " iterate through list of files
        For Each myFile In fileArray
          
           fileName = myFile.Substring( _
              myFile.LastIndexOf("\") + 1)
          
           matchResult = regularExpression.Match(fileName)
          
           If (matchResult.Success) Then
              fileExtension = matchResult.Result("${extension}")
           Else
              fileExtension = "[no extension]"
           End If
          
           If (found(fileExtension) = Nothing) Then
              found.Add(fileExtension, "1")
           Else
              extensionCount = _
                 Convert.ToInt32(found(fileExtension)) + 1
              found(fileExtension) = extensionCount.ToString()
           End If
        Next
      
        For Each myDirectory In directoryList
           SearchDirectory(myDirectory)
        Next
      
     Catch unauthorizedAccess As UnauthorizedAccessException
        MessageBox.Show("Some files may not be visible due to" _
           & " permission settings", "Warning", _
           MessageBoxButtons.OK, MessageBoxIcon.Information)
     End Try
  End Sub

End Class

      </source>


Get all directories

<source lang="vbnet"> Imports System Imports System.IO Public Class MainClass

 Shared Sub Main()
   Dim curDir, nextDir As String
   Try
     curDir = Directory.GetCurrentDirectory()
     Console.WriteLine(curDir)
     For Each nextDir In Directory.GetDirectories(curDir)
       Console.WriteLine(nextDir)
     Next
   Catch ioe As IOException
     Console.WriteLine("i/o problems!" & ioe.Message)
   Catch e As Exception
     Console.Write(e.StackTrace)
   Finally
     Console.Write("Done")
   End Try
 End Sub
 

End Class


      </source>


Get Current Directory

<source lang="vbnet"> Imports System

Public Class MainClass

  Shared Sub Main()
       Console.WriteLine("CurrentDirectory:   " & System.Environment.CurrentDirectory )
  End Sub 

End Class

      </source>


Get file in the parent folder

<source lang="vbnet"> Imports System Imports System.Windows.Forms Public Class MainClass

  Shared Sub Main()
       Dim file_name As String = Application.StartupPath
       file_name = file_name.Substring(0, file_name.LastIndexOf("\"))
       file_name = file_name.Substring(0, file_name.LastIndexOf("\"))
       file_name &= "\test.vb"
       Console.WriteLine( file_name)
  End Sub 

End Class

      </source>


Get Root directory and current directory

<source lang="vbnet"> Imports System.IO Module Module1

   Sub Main()
       Dim Current As String
       Dim Root As String
       Try
           Current = Directory.GetCurrentDirectory()
           Root = Directory.GetDirectoryRoot(Current)
           Root = Directory.GetDirectoryRoot("\")
           Console.WriteLine("Current directory {0}", Current)
           Console.WriteLine("Root directory {0}", Root)
       Catch E As Exception
           Console.WriteLine("Error determining root directory")
           Console.WriteLine(E.Message)
       End Try
   End Sub

End Module


      </source>


List files and directories in root

<source lang="vbnet"> Imports System.IO Module Module1

   Sub Main()
       Dim Files As String() = Directory.GetFiles("C:\")
       Dim Dirs As String() = Directory.GetDirectories("C:\")
       Console.WriteLine("Root Files")
       Dim Filename As String
       For Each Filename In Files
           Console.WriteLine(Filename)
       Next
       Console.WriteLine("Root Directories")
       Dim DirectoryName As String
       For Each DirectoryName In Dirs
           Console.WriteLine(DirectoryName)
       Next
   End Sub

End Module


      </source>


Recursive Directory Info

<source lang="vbnet"> Imports System Imports System.IO Public Class MainClass

 Shared Sub Main()
   Dim nameOfDirectory As String = "C:\"
   Dim myDirectory As DirectoryInfo
   myDirectory = New DirectoryInfo(nameOfDirectory)
   WorkWithDirectory(myDirectory)
 End Sub
 Shared Public Sub WorkWithDirectory(ByVal aDir As DirectoryInfo)
   Dim nextDir As DirectoryInfo
   WorkWithFilesInDir(aDir)
   For Each nextDir In aDir.GetDirectories
     WorkWithDirectory(nextDir)
   Next
 End Sub
 Shared Public Sub WorkWithFilesInDir(ByVal aDir As DirectoryInfo)
   Dim aFile As FileInfo
   For Each aFile In aDir.GetFiles()
     Console.WriteLine(aFile.FullName)
   Next
 End Sub
 

End Class


      </source>


Update Directory: create time, last access time and last write time

<source lang="vbnet"> Imports System.IO Module Module1

   Sub Main()
       If (Directory.Exists("C:\WINNT\Temp")) Then
           Dim Dir As New DirectoryInfo("C:\WINNT\Temp")
           Dim DateTimeNow As DateTime = DateTime.Now()
           Try
               Dir.CreationTime = DateTimeNow
               Dir.LastAccessTime = DateTimeNow
               Dir.LastWriteTime = DateTimeNow
               Console.WriteLine("Directory attributes updated")
           Catch E As Exception
               Console.WriteLine("Error updating attributes")
               Console.WriteLine("Error {0}: ", E.Message)
           End Try
       Else
           Console.WriteLine("C:\WINNT\Temp does not exist")
       End If
   End Sub

End Module


      </source>