Návod: Práce se soubory a adresáři v jazyce Visual Basic

Tento názorný postup obsahuje úvod k základům V/V souborů v Visual Basic. Popisuje, jak vytvořit malou aplikaci, která vypíše a prozkoumá textové soubory v adresáři. Pro každý vybraný textový soubor aplikace poskytuje atributy souboru a první řádek obsahu. Existuje možnost zapisovat informace do souboru protokolu.

Tento názorný postup používá členy My.Computer.FileSystem Object , které jsou k dispozici v Visual Basic. Další informace naleznete v tématu FileSystem. Na konci návodu je k dispozici ekvivalentní příklad, který používá třídy z oboru System.IO názvů .

Poznámka

Váš počítač může v následujících pokynech zobrazovat odlišné názvy nebo umístění některých prvků uživatelského rozhraní sady Visual Studio. Tyto prvky jsou určeny edicí sady Visual Studio a použitým nastavením. Další informace najdete v tématu Přizpůsobení integrovaného vývojového prostředí (IDE).

Vytvoření projektu

  1. V nabídce Soubor klikněte na Nový Project.

    Zobrazí se dialogové okno Nový projekt.

  2. V podokně Nainstalované šablony rozbalte Visual Basic a potom klikněte na Windows. V prostředním podokně Šablony klikněte na Windows Formulářová aplikace.

  3. Do pole Název zadejte , FileExplorer abyste nastavili název projektu, a potom klikněte na OK.

    Visual Studio přidá projekt do Průzkumník řešení a otevře Windows Návrhář formulářů.

  4. Přidejte ovládací prvky v následující tabulce do formuláře a nastavte odpovídající hodnoty pro jejich vlastnosti.

    Řízení Vlastnost Hodnota
    ListBox Název filesListBox
    Tlačítko Název

    Text
    browseButton

    Procházet
    Tlačítko Název

    Text
    examineButton

    Zkoumat
    CheckBox Název

    Text
    saveCheckBox

    Uložení výsledků
    Vlastnost FolderBrowserDialog Název FolderBrowserDialog1

Výběr složky a zobrazení seznamu souborů ve složce

  1. Vytvořte Click obslužnou browseButton rutinu události pro poklikáním na ovládací prvek ve formuláři. Otevře se Editor kódu.

  2. Do obslužné rutiny události přidejte Click následující kód.

    If FolderBrowserDialog1.ShowDialog() = DialogResult.OK Then
        ' List files in the folder.
        ListFiles(FolderBrowserDialog1.SelectedPath)
    End If
    

    Volání FolderBrowserDialog1.ShowDialog otevře dialogové okno Vyhledat složku. Když uživatel klikne na OK, vlastnost se do metody, která se přidá v dalším kroku, odesílá SelectedPath jako ListFiles argument.

  3. Přidejte následující ListFiles metodu.

    Private Sub ListFiles(ByVal folderPath As String)
        filesListBox.Items.Clear()
    
        Dim fileNames = My.Computer.FileSystem.GetFiles(
            folderPath, FileIO.SearchOption.SearchTopLevelOnly, "*.txt")
    
        For Each fileName As String In fileNames
            filesListBox.Items.Add(fileName)
        Next
    End Sub
    

    Tento kód nejprve vymaže listBox.

    Metoda pak načte kolekci řetězců, jednu pro GetFiles každý soubor v adresáři. Metoda GetFiles přijímá argument vzoru hledání pro načtení souborů, které odpovídají určitému vzoru. V tomto příkladu se vrátí pouze soubory s .txt příponou .

    Řetězce, které jsou vráceny GetFiles metodou , se pak přidávají do prvku ListBox.

  4. Spusťte aplikaci. Klikněte na tlačítko Procházet. V dialogovém okně Vyhledat složku přejděte do složky, která obsahuje .txt souborů, vyberte složku a klikněte na OK.

    obsahuje ListBox seznam všech .txt ve vybrané složce.

  5. Zastavte spuštění aplikace.

Získání atributů souboru a obsahu z textového souboru

  1. Vytvořte Click obslužnou examineButton rutinu události pro poklikáním na ovládací prvek ve formuláři.

  2. Do obslužné rutiny události přidejte Click následující kód.

    If filesListBox.SelectedItem Is Nothing Then
        MessageBox.Show("Please select a file.")
        Exit Sub
    End If
    
    ' Obtain the file path from the list box selection.
    Dim filePath = filesListBox.SelectedItem.ToString
    
    ' Verify that the file was not removed since the
    ' Browse button was clicked.
    If My.Computer.FileSystem.FileExists(filePath) = False Then
        MessageBox.Show("File Not Found: " & filePath)
        Exit Sub
    End If
    
    ' Obtain file information in a string.
    Dim fileInfoText As String = GetTextForOutput(filePath)
    
    ' Show the file information.
    MessageBox.Show(fileInfoText)
    

    Kód ověří, zda je položka vybrána v ListBox objektu . Pak získá položku cesty k souboru z ListBox . Metoda FileExists se používá ke kontrole, jestli soubor stále existuje.

    Cesta k souboru je odeslána jako argument GetTextForOutput metody , která je přidána v dalším kroku. Tato metoda vrátí řetězec, který obsahuje informace o souboru. Informace o souboru se zobrazí v prvku MessageBox.

  3. Přidejte následující GetTextForOutput metodu.

    Private Function GetTextForOutput(ByVal filePath As String) As String
        ' Verify that the file exists.
        If My.Computer.FileSystem.FileExists(filePath) = False Then
            Throw New Exception("File Not Found: " & filePath)
        End If
    
        ' Create a new StringBuilder, which is used
        ' to efficiently build strings.
        Dim sb As New System.Text.StringBuilder()
    
        ' Obtain file information.
        Dim thisFile As System.IO.FileInfo = My.Computer.FileSystem.GetFileInfo(filePath)
    
        ' Add file attributes.
        sb.Append("File: " & thisFile.FullName)
        sb.Append(vbCrLf)
        sb.Append("Modified: " & thisFile.LastWriteTime.ToString)
        sb.Append(vbCrLf)
        sb.Append("Size: " & thisFile.Length.ToString & " bytes")
        sb.Append(vbCrLf)
    
        ' Open the text file.
        Dim sr As System.IO.StreamReader =
            My.Computer.FileSystem.OpenTextFileReader(filePath)
    
        ' Add the first line from the file.
        If sr.Peek() >= 0 Then
            sb.Append("First Line: " & sr.ReadLine())
        End If
        sr.Close()
    
        Return sb.ToString
    End Function
    

    Kód používá GetFileInfo metodu k získání parametrů souboru. Parametry souboru se přidávají do StringBuilder .

    Metoda OpenTextFileReader načte obsah souboru do StreamReader . První řádek obsahu je získán z a StreamReader je přidán do StringBuilder .

  4. Spusťte aplikaci. Klikněte na Procházet a přejděte do složky, která obsahuje .txt souborů. Klikněte na OK.

    V souboru vyberte soubor a ListBox pak klikněte na Prozkoumat. A MessageBox zobrazí informace o souboru.

  5. Zastavte spuštění aplikace.

Přidání položky protokolu

  1. Na konec obslužné rutiny události přidejte examineButton_Click následující kód.

    If saveCheckBox.Checked = True Then
        ' Place the log file in the same folder as the examined file.
        Dim logFolder As String = My.Computer.FileSystem.GetFileInfo(filePath).DirectoryName
        Dim logFilePath = My.Computer.FileSystem.CombinePath(logFolder, "log.txt")
    
        Dim logText As String = "Logged: " & Date.Now.ToString &
            vbCrLf & fileInfoText & vbCrLf & vbCrLf
    
        ' Append text to the log file.
        My.Computer.FileSystem.WriteAllText(logFilePath, logText, append:=True)
    End If
    

    Kód nastaví cestu k souboru protokolu tak, aby soubor protokolu byl ve stejném adresáři jako vybraný soubor. Text položky protokolu je nastavený na aktuální datum a čas následovaný informacemi o souboru.

    Metoda WriteAllText s append argumentem nastaveným na True se používá k vytvoření položky protokolu.

  2. Spusťte aplikaci. Přejděte na textový soubor, vyberte ho v , zaškrtněte políčko Uložit výsledky a ListBox pak klikněte na Prozkoumat. Ověřte, že je položka protokolu zapsána do log.txt souboru .

  3. Zastavte spuštění aplikace.

Použití aktuálního adresáře

  1. Vytvořte obslužnou Form1_Load rutinu události pro poklikáním na formulář.

  2. Do obslužné rutiny události přidejte následující kód.

    ' Set the default directory of the folder browser to the current directory.
    FolderBrowserDialog1.SelectedPath = My.Computer.FileSystem.CurrentDirectory
    

    Tento kód nastaví výchozí adresář prohlížeče složek na aktuální adresář.

  3. Spusťte aplikaci. Když poprvé kliknete na Procházet, otevře se dialogové okno Vyhledat složku v aktuálním adresáři.

  4. Zastavte spuštění aplikace.

Selektivní povolení ovládacích prvků

  1. Přidejte následující SetEnabled metodu.

    Private Sub SetEnabled()
        Dim anySelected As Boolean =
            (filesListBox.SelectedItem IsNot Nothing)
    
        examineButton.Enabled = anySelected
        saveCheckBox.Enabled = anySelected
    End Sub
    

    Metoda SetEnabled povolí nebo zakáže ovládací prvky v závislosti na tom, jestli je položka vybraná v objektu ListBox .

  2. Vytvořte SelectedIndexChanged obslužnou filesListBox rutinu události pro poklikáním na ListBox ovládací prvek ve formuláři.

  3. Přidejte volání do SetEnabled nové obslužné filesListBox_SelectedIndexChanged rutiny události.

  4. Na konec obslužné rutiny SetEnabled události přidejte browseButton_Click volání .

  5. Na konec obslužné rutiny SetEnabled události přidejte Form1_Load volání .

  6. Spusťte aplikaci. Pokud položka v seznamu není vybraná, zaškrtávací políčko Uložit výsledky a tlačítko Prozkoumat jsou ListBox zakázané.

Úplný příklad použití My.Computer.FileSystem

Toto je kompletní příklad.


' This example uses members of the My.Computer.FileSystem
' object, which are available in Visual Basic.

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    ' Set the default directory of the folder browser to the current directory.
    FolderBrowserDialog1.SelectedPath = My.Computer.FileSystem.CurrentDirectory

    SetEnabled()
End Sub

Private Sub browseButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles browseButton.Click
    If FolderBrowserDialog1.ShowDialog() = DialogResult.OK Then
        ' List files in the folder.
        ListFiles(FolderBrowserDialog1.SelectedPath)
    End If
    SetEnabled()
End Sub

Private Sub ListFiles(ByVal folderPath As String)
    filesListBox.Items.Clear()

    Dim fileNames = My.Computer.FileSystem.GetFiles(
        folderPath, FileIO.SearchOption.SearchTopLevelOnly, "*.txt")

    For Each fileName As String In fileNames
        filesListBox.Items.Add(fileName)
    Next
End Sub

Private Sub examineButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles examineButton.Click
    If filesListBox.SelectedItem Is Nothing Then
        MessageBox.Show("Please select a file.")
        Exit Sub
    End If

    ' Obtain the file path from the list box selection.
    Dim filePath = filesListBox.SelectedItem.ToString

    ' Verify that the file was not removed since the
    ' Browse button was clicked.
    If My.Computer.FileSystem.FileExists(filePath) = False Then
        MessageBox.Show("File Not Found: " & filePath)
        Exit Sub
    End If

    ' Obtain file information in a string.
    Dim fileInfoText As String = GetTextForOutput(filePath)

    ' Show the file information.
    MessageBox.Show(fileInfoText)

    If saveCheckBox.Checked = True Then
        ' Place the log file in the same folder as the examined file.
        Dim logFolder As String = My.Computer.FileSystem.GetFileInfo(filePath).DirectoryName
        Dim logFilePath = My.Computer.FileSystem.CombinePath(logFolder, "log.txt")

        Dim logText As String = "Logged: " & Date.Now.ToString &
            vbCrLf & fileInfoText & vbCrLf & vbCrLf

        ' Append text to the log file.
        My.Computer.FileSystem.WriteAllText(logFilePath, logText, append:=True)
    End If
End Sub

Private Function GetTextForOutput(ByVal filePath As String) As String
    ' Verify that the file exists.
    If My.Computer.FileSystem.FileExists(filePath) = False Then
        Throw New Exception("File Not Found: " & filePath)
    End If

    ' Create a new StringBuilder, which is used
    ' to efficiently build strings.
    Dim sb As New System.Text.StringBuilder()

    ' Obtain file information.
    Dim thisFile As System.IO.FileInfo = My.Computer.FileSystem.GetFileInfo(filePath)

    ' Add file attributes.
    sb.Append("File: " & thisFile.FullName)
    sb.Append(vbCrLf)
    sb.Append("Modified: " & thisFile.LastWriteTime.ToString)
    sb.Append(vbCrLf)
    sb.Append("Size: " & thisFile.Length.ToString & " bytes")
    sb.Append(vbCrLf)

    ' Open the text file.
    Dim sr As System.IO.StreamReader =
        My.Computer.FileSystem.OpenTextFileReader(filePath)

    ' Add the first line from the file.
    If sr.Peek() >= 0 Then
        sb.Append("First Line: " & sr.ReadLine())
    End If
    sr.Close()

    Return sb.ToString
End Function

Private Sub filesListBox_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles filesListBox.SelectedIndexChanged
    SetEnabled()
End Sub

Private Sub SetEnabled()
    Dim anySelected As Boolean =
        (filesListBox.SelectedItem IsNot Nothing)

    examineButton.Enabled = anySelected
    saveCheckBox.Enabled = anySelected
End Sub

Úplný příklad použití System.IO

Následující podobný příklad používá třídy z System.IO oboru názvů namísto použití My.Computer.FileSystem objektů.


' This example uses classes from the System.IO namespace.

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    ' Set the default directory of the folder browser to the current directory.
    FolderBrowserDialog1.SelectedPath =
        System.IO.Directory.GetCurrentDirectory()

    SetEnabled()
End Sub

Private Sub browseButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles browseButton.Click
    If FolderBrowserDialog1.ShowDialog() = DialogResult.OK Then
        ' List files in the folder.
        ListFiles(FolderBrowserDialog1.SelectedPath)
        SetEnabled()
    End If
End Sub

Private Sub ListFiles(ByVal folderPath As String)
    filesListBox.Items.Clear()

    Dim fileNames As String() =
        System.IO.Directory.GetFiles(folderPath,
            "*.txt", System.IO.SearchOption.TopDirectoryOnly)

    For Each fileName As String In fileNames
        filesListBox.Items.Add(fileName)
    Next
End Sub

Private Sub examineButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles examineButton.Click
    If filesListBox.SelectedItem Is Nothing Then
        MessageBox.Show("Please select a file.")
        Exit Sub
    End If

    ' Obtain the file path from the list box selection.
    Dim filePath = filesListBox.SelectedItem.ToString

    ' Verify that the file was not removed since the
    ' Browse button was clicked.
    If System.IO.File.Exists(filePath) = False Then
        MessageBox.Show("File Not Found: " & filePath)
        Exit Sub
    End If

    ' Obtain file information in a string.
    Dim fileInfoText As String = GetTextForOutput(filePath)

    ' Show the file information.
    MessageBox.Show(fileInfoText)

    If saveCheckBox.Checked = True Then
        ' Place the log file in the same folder as the examined file.
        Dim logFolder As String =
            System.IO.Path.GetDirectoryName(filePath)
        Dim logFilePath = System.IO.Path.Combine(logFolder, "log.txt")

        ' Append text to the log file.
        Dim logText As String = "Logged: " & Date.Now.ToString &
            vbCrLf & fileInfoText & vbCrLf & vbCrLf

        System.IO.File.AppendAllText(logFilePath, logText)
    End If
End Sub

Private Function GetTextForOutput(ByVal filePath As String) As String
    ' Verify that the file exists.
    If System.IO.File.Exists(filePath) = False Then
        Throw New Exception("File Not Found: " & filePath)
    End If

    ' Create a new StringBuilder, which is used
    ' to efficiently build strings.
    Dim sb As New System.Text.StringBuilder()

    ' Obtain file information.
    Dim thisFile As New System.IO.FileInfo(filePath)

    ' Add file attributes.
    sb.Append("File: " & thisFile.FullName)
    sb.Append(vbCrLf)
    sb.Append("Modified: " & thisFile.LastWriteTime.ToString)
    sb.Append(vbCrLf)
    sb.Append("Size: " & thisFile.Length.ToString & " bytes")
    sb.Append(vbCrLf)

    ' Open the text file.
    Dim sr As System.IO.StreamReader =
        System.IO.File.OpenText(filePath)

    ' Add the first line from the file.
    If sr.Peek() >= 0 Then
        sb.Append("First Line: " & sr.ReadLine())
    End If
    sr.Close()

    Return sb.ToString
End Function

Private Sub filesListBox_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles filesListBox.SelectedIndexChanged
    SetEnabled()
End Sub

Private Sub SetEnabled()
    Dim anySelected As Boolean =
        (filesListBox.SelectedItem IsNot Nothing)

    examineButton.Enabled = anySelected
    saveCheckBox.Enabled = anySelected
End Sub

Viz také