Sdílet prostřednictvím


Názorný postup: Zpracování souborů a adresářů v jazyce Visual Basic

Tento návod obsahuje úvod k základům vstupně-výstupních operací v Visual Basic.Popisuje, jak vytvořit malé aplikace, která obsahuje seznam a zkoumá textových souborů v adresáři.Pro každý vybraný text soubor aplikace obsahuje atributy souborů a první řádek obsahu.Existuje možnost zápisu do souboru protokolu.

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

[!POZNÁMKA]

Ve vašem počítači se pro některé z prvků uživatelského rozhraní sady Visual Studio mohou zobrazit jiné názvy a umístění, než jsou uvedeny v následujících pokynech. Tyto prvky jsou určeny verzí aplikace Visual Studio a použitým nastavením. Další informace naleznete v tématu Nastavení aplikace Visual Studio.

Jak vytvořit nový projekt

  1. V nabídce Soubor klepněte na příkaz Nový Projekt.

    Zobrazí se dialogové okno Nový projekt.

  2. V Nainstalované šablony podokně rozbalte položku jazyka Visual Basica klepněte na tlačítko Windows.V šablony v prostřední, klepněte na podokno Aplikace model Windows Forms.

  3. V název zadejte FileExplorer nastavit název projektu a klepněte na tlačítko OK.

    Visual Studio přidá do projektu Průzkumník řešení a otevře designer pro model Windows Forms.

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

    Ovládací prvek

    Property

    Value

    ListBox

    Název

    filesListBox

    Tlačítko

    Název

    Text

    browseButton

    Procházet

    Tlačítko

    Název

    Text

    examineButton

    Examine

    CheckBox

    Název

    Text

    saveCheckBox

    Uložit výsledky

    FolderBrowserDialog

    Název

    FolderBrowserDialog1

Vyberte složku a seznam souborů ve složce

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

  2. Přidejte následující kód Click obslužnou rutinu události.

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

    FolderBrowserDialog1.ShowDialog Volání otevře Vyhledat složku dialogové okno.Poté, co uživatel klepne na OK, SelectedPath vlastnost je odeslána jako argument ListFiles metodu, která je přidána v dalším kroku.

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

    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 seznam.

    GetFiles Metoda poté načte kolekce řetězců, jeden pro každý soubor v adresáři.GetFiles Metoda přijímá argument pro vzorek hledání, načíst soubory, které odpovídají určitým způsobem.V tomto příkladu jsou vráceny pouze soubory s příponou TXT.

    Řetězce, které jsou vráceny GetFiles metody jsou potom přidány do seznam.

  4. Spusťte aplikaci.Klepněte procházení tlačítko.V Vyhledat složku dialogové okno, přejděte do složky, která obsahuje soubory s příponou TXT a pak vyberte složku a klepněte na OK.

    ListBox Obsahuje seznam souborů TXT ve vybrané složce.

  5. Zastavení, spuštění aplikace.

Získat atributy souboru a obsah z textového souboru

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

  2. Přidejte následující kód Click obslužnou rutinu události.

    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ěří vybranou položku v ListBox.Poté získá položka cesty k souboru z ListBox.FileExists Metoda slouží ke kontrole, zda soubor stále existuje.

    Cesta k souboru je odeslána jako argument GetTextForOutput metodu, 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 MessageBox.

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

    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 metodou k získání souboru parametrů.Parametry souboru jsou přidány do StringBuilder.

    OpenTextFileReader Metoda načte obsah souboru do StreamReader.První řádek obsahu získané z StreamReader a doplňuje StringBuilder.

  4. Spusťte aplikaci.Klepněte na tlačítko procházenía vyhledejte složku, která obsahuje soubory s příponou TXT.Klikněte na tlačítko OK.

    Vyberte soubor v ListBoxa klepněte na tlačítko Kontrola.A MessageBox zobrazuje informace o souboru.

  5. Zastavení, spuštění aplikace.

Přidat položku protokolu

  1. Přidejte následující kód na konec examineButton_Click obslužnou rutinu události.

    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 pro soubor protokolu ve stejném adresáři jako vybraný soubor.Text položky protokolu nastavena na aktuální datum a čas následovaný informací o souboru.

    WriteAllText Metoda, se append argument nastaven na hodnotu True, se používá k vytvoření položky protokolu.

  2. Spusťte aplikaci.Vyhledejte textový soubor, vyberte jej v ListBox, vyberte Uložit výsledky políčko a klepněte na tlačítko Kontrola.Ověřte, že je položka protokolu zapsány do log.txt souboru.

  3. Zastavení, spuštění aplikace.

Aktuální adresář

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

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

    ' 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ář složka prohlížeče do aktuálního adresáře.

  3. Spusťte aplikaci.Po klepnutí na tlačítko procházení poprvé, Vyhledat složku do aktuálního adresáře, otevře se dialogové okno.

  4. Zastavení, spuštění aplikace.

Povolit ovládací prvky

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

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

    SetEnabled Metoda povoluje nebo zakazuje ovládacích prvků v závislosti na tom, zda je položka vybraná v ListBox.

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

  3. Přidat volání SetEnabled v nové filesListBox_SelectedIndexChanged obslužnou rutinu události.

  4. Přidat volání SetEnabled na konci browseButton_Click obslužnou rutinu události.

  5. Přidat volání SetEnabled na konci Form1_Load obslužnou rutinu události.

  6. Spusťte aplikaci.Uložit výsledky políčko a Kontrola tlačítka jsou zakázány, pokud není vybrána položka v ListBox.

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

Následuje příklad úplné.


    ' 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

Celý příklad použití System.IO

Ekvivalentní následující příklad používá třídy z System.IO oboru názvů místo 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é

Úkoly

Názorný postup: Manipulace pomocí souborů.NET Framework metody (Visual Basic)

Referenční dokumentace

System.IO

FileSystem

CurrentDirectory