Megosztás a következőn keresztül:


Útmutató: Fájlok és könyvtárak manipulálása a Visual Basicben

Ez az útmutató bemutatja a Visual Basic fájl I/O-jának alapjait. Leírja, hogyan hozhat létre egy kis alkalmazást, amely felsorolja és megvizsgálja a könyvtárban lévő szövegfájlokat. Az alkalmazás minden kijelölt szövegfájlhoz fájlattribútumokat és az első tartalomsort biztosít. Lehetőség van arra, hogy adatokat írjon egy naplófájlba.

Ez az útmutató a My.Computer.FileSystem Object tagokat használja, amelyek elérhetők a Visual Basicben. További információért lásd a FileSystem jelű részt. Az útmutató végén egy egyenértékű példa látható, amely a System.IO névtér osztályait használja.

Megjegyzés:

Előfordulhat, hogy a számítógép különböző neveket vagy helyeket jelenít meg a Visual Studio felhasználói felületének egyes elemeihez az alábbi utasításokban. Ezeket az elemeket a Visual Studio-kiadás és a használt beállítások határozzák meg. További információért lásd: A fejlesztői környezet személyre szabása.

A projekt létrehozása

  1. A Fájl menüben kattintson az Új projekt gombra.

    Megjelenik a New project (Új projekt) párbeszédpanel.

  2. A Telepített sablonok panelen bontsa ki a Visual Basic elemet, majd kattintson a Windows elemre. A középen lévő Sablonok panelen kattintson a Windows Forms-alkalmazás elemre.

  3. A Név mezőbe írja be FileExplorer a projekt nevét, majd kattintson az OK gombra.

    A Visual Studio hozzáadja a projektet a Megoldáskezelőhöz, és megnyílik a Windows Forms Designer.

  4. Adja hozzá az alábbi táblázatban szereplő vezérlőket az űrlaphoz, és állítsa be a tulajdonságok megfelelő értékeit.

    Vezérlő Ingatlan Érték
    ListBox Név filesListBox
    gomb Név

    Szöveg
    browseButton

    Tallózás
    gomb Név

    Szöveg
    examineButton

    Megvizsgál
    jelölőnégyzet Név

    Szöveg
    saveCheckBox

    Eredmények mentése
    FolderBrowserDialog Név FolderBrowserDialog1

Mappa kijelölése és fájlok listázása egy mappában

  1. Hozzon létre egy Click eseménykezelőt a browseButton-hez az űrlapon lévő vezérlőelemre duplán kattintva. Megnyílik a Kódszerkesztő.

  2. Adja hozzá a következő kódot az Click eseménykezelőhöz.

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

    A FolderBrowserDialog1.ShowDialog hívás megnyitja a Mappa tallózása párbeszédpanelt. Miután a felhasználó az OK gombra kattint, a rendszer argumentumként elküldi a SelectedPath tulajdonságot a ListFiles metódusnak, amelyet a következő lépésben ad hozzá.

  3. Adja hozzá a következő ListFiles metódust.

    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
    

    Ez a kód először törli a ListBoxot.

    A GetFiles metódus ezután lekéri a sztringek gyűjteményét, egyet a könyvtárban lévő minden fájlhoz. A GetFiles metódus egy keresési minta argumentumot fogad el egy adott mintának megfelelő fájlok lekéréséhez. Ebben a példában csak a .txt kiterjesztésű fájlok lesznek visszaadva.

    A metódus által visszaadott sztringek GetFiles ezután bekerülnek a ListBoxba.

  4. Indítsa el az alkalmazást. Kattintson a Tallózás gombra. A Mappa tallózása párbeszédpanelen keresse meg a .txt fájlokat tartalmazó mappát, majd jelölje ki a mappát, és kattintson az OK gombra.

    A ListBox kijelölt mappában található .txt fájlok listája.

  5. Állítsa le az alkalmazás futtatását.

Fájl attribútumainak és egy szövegfájl tartalmának lekérése

  1. Hozzon létre egy Click eseménykezelőt a examineButton-hez az űrlapon lévő vezérlőelemre duplán kattintva.

  2. Adja hozzá a következő kódot az Click eseménykezelőhöz.

    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)
    

    A kód ellenőrzi, hogy egy elem ki van-e jelölve a ListBox. Ezután beolvasja a fájl elérési útjának bejegyzését a ListBox. A FileExists metódus segítségével ellenőrizheti, hogy a fájl továbbra is létezik-e.

    A fájl elérési útja argumentumként lesz elküldve a GetTextForOutput metódusnak, amelyet a következő lépésben ad hozzá. Ez a metódus egy fájlinformációkat tartalmazó sztringet ad vissza. A fájladatok megjelennek a MessageBoxban.

  3. Adja hozzá a következő GetTextForOutput metódust.

    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
    

    A kód a GetFileInfo metódussal szerzi meg a fájlparamétereket. A fájlparaméterek hozzá lesznek adva egy StringBuilder.

    A OpenTextFileReader módszer beolvassa a fájl tartalmát egy StreamReader. A tartalom első sorát a StreamReader generálja, és hozzáadódik a StringBuilder-hez.

  4. Indítsa el az alkalmazást. Kattintson a Tallózás gombra, és keresse meg a .txt fájlokat tartalmazó mappát. Kattintson az OK gombra.

    Jelöljön ki egy fájlt a ListBox felületen, majd kattintson a Vizsgálat gombra. Az A MessageBox fájlinformációkat jeleníti meg.

  5. Állítsa le az alkalmazás futtatását.

Naplóbejegyzés hozzáadása

  1. Adja hozzá az alábbi kódot az examineButton_Click eseménykezelő végéhez.

    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
    

    A kód úgy állítja be a naplófájl elérési útját, hogy a naplófájl ugyanabba a könyvtárba kerüljön, mint a kijelölt fájl. A naplóbejegyzés szövege az aktuális dátumra és időpontra van állítva, amelyet a fájladatok követnek.

    A WriteAllText metódust használják a naplóbejegyzés létrehozására, ahol a append argumentum értéke True.

  2. Indítsa el az alkalmazást. Tallózással válassza ki a szövegfájlt a ListBox-ben, jelölje be az Eredmények mentése jelölőnégyzetet, majd kattintson a Vizsgálat gombra. Ellenőrizze, hogy a naplóbejegyzés a fájlba van-e log.txt írva.

  3. Állítsa le az alkalmazás futtatását.

Az aktuális könyvtár használatához

  1. Hozzon létre egy eseménykezelőt Form1_Load az űrlapra duplán kattintva.

  2. Adja hozzá a következő kódot az eseménykezelőhöz.

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

    Ez a kód a mappaböngésző alapértelmezett könyvtárát az aktuális könyvtárra állítja.

  3. Indítsa el az alkalmazást. Amikor először a Tallózás gombra kattint, a Mappa tallózása párbeszédpanel az Aktuális könyvtárra nyílik meg.

  4. Állítsa le az alkalmazás futtatását.

Vezérlők szelektív engedélyezése

  1. Adja hozzá a következő SetEnabled metódust.

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

    A SetEnabled metódus engedélyezi vagy letiltja a vezérlőket attól függően, hogy egy elem van-e kijelölve a ListBox.

  2. Hozzon létre egy SelectedIndexChanged eseménykezelőt filesListBox az űrlapon található ListBox vezérlőelemre duplán kattintva.

  3. Adjunk hozzá egy hívást SetEnabled az új filesListBox_SelectedIndexChanged eseménykezelőhöz.

  4. Adjon hozzá egy hívást a SetEnabled eseménykezelő végén browseButton_Click.

  5. Adjon hozzá egy hívást a SetEnabled eseménykezelő végén Form1_Load.

  6. Indítsa el az alkalmazást. Az Eredmények mentése jelölőnégyzet és a Vizsgálat gomb le van tiltva, ha egy elem nincs kijelölve a ListBoxlistában.

Teljes példa a My.Computer.FileSystem használatával

A teljes példa az alábbi.


' 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

Teljes példa a System.IO használatával

Az alábbi egyenértékű példa a System.IO névtér osztályait használja a My.Computer.FileSystem objektumok helyett.


' 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

Lásd még