Variable String in Zahl umwandeln

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von HDebus.

    Variable String in Zahl umwandeln

    Hallo,

    ich versuche ein Progrämmchen zu machen, womit ich einfach alle Dateien eines Verzeichnisses rekursiv zu suchen die größer als 50 MB sind

    Hier mal mein Ansatz

    VB.NET-Quellcode

    1. Imports System.IO
    2. Public Class Form1
    3. Private Sub Button1_Click(ByVal sender As System.Object, ByVale As System.EventArgs) Handles Button1.Click
    4. Me.Folderbrowserdialog1.showdialog()
    5. ListFiles(Me.FolderBrowserDialog1.SelectedPath)
    6. End Sub
    7. Private Sub ListFiles(ByVal [path] As String)
    8. Dim DirInfo As New DirectoryInfo(path)
    9. Dim FileObj As IO.FileSystemInfo
    10. For Each FileObj In DirInfo.GetFileSystemInfos
    11. If FileObj.Attributes = FileAttributes.Directory Then
    12. ListFiles(FileObj.FullName)
    13. Else
    14. Me.ListBox1.Items.Add(FileObj.FullName)
    15. End If
    16. Next
    17. End Sub
    18. End Class



    Kann mir da jemand weiterhelfen

    Danke
    Holger
    Könntest du das nicht einfach mit einer For Each Schleife und FileLen machen?

    VB.NET-Quellcode

    1. Dim di As New DirectoryInfo("c:\")
    2. Dim fiArr As FileInfo() = di.GetFiles()
    3. Dim fri As FileInfo
    4. For Each fri In fiArr
    5. Dim MySize As Long
    6. MySize = FileLen("c:\" & fri.Name)
    7. If MySize >= 50000000 Then
    8. MsgBox(fri.Name & "ist größer als 50000000 bytes!")
    9. End If
    10. Next fri


    Funktioniert aber nicht für Sub-Directories!

    Viel Glück!
    Die beste maschinelle Übersetzung der Welt - DeepL Übersetzer
    Alle Zitate, die ich seit dem 1.9.2017 übersetzt habe, wurden vollautomatisch mit DeepL übersetzt.



    Danke der Ansatz hat mir gefehlt. Habe es dann so eingebaut

    VB.NET-Quellcode

    1. Private Sub ListFiles(ByVal [path] As String)
    2. Dim DirInfo As New DirectoryInfo(path)
    3. Dim FileObj As IO.FileSystemInfo
    4. Dim MySize As Long
    5. For Each FileObj In DirInfo.GetFileSystemInfos
    6. If FileObj.Attributes = FileAttributes.Directory Then
    7. ListFiles(FileObj.FullName)
    8. Else
    9. MySize = FileLen(FileObj.FullName)
    10. If MySize >= 800000 Then '50000000
    11. Me.ListBox1.Items.Add(FileObj.FullName)
    12. End If
    13. End If
    14. Next
    15. End Sub



    und es funzt.

    Danke nochmal

    Holger

    VB.NET-Quellcode

    1. Imports System
    2. Imports System.IO
    3. Public Class Form1
    4. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    5. Dim di As New DirectoryInfo("C:\")
    6. Dim fiArr As FileInfo() = di.GetFiles("*", SearchOption.AllDirectories)
    7. Dim fri As FileInfo
    8. For Each fri In fiArr
    9. Dim MySize As Long
    10. MySize = FileLen(fri.DirectoryName & "\" & fri.Name)
    11. If MySize >= 5000 Then
    12. MsgBox(fri.Name & "ist größer als 5000 bytes!")
    13. Else
    14. MsgBox(fri.DirectoryName & "\" & fri.Name & " \nist es nicht!")
    15. End If
    16. Next fri
    17. End Sub
    18. End Class


    Die Version prüft auch alle Sub Directories! Ich hoffe ich konnte helfen, hat mich auch selber interessiert :P
    Die beste maschinelle Übersetzung der Welt - DeepL Übersetzer
    Alle Zitate, die ich seit dem 1.9.2017 übersetzt habe, wurden vollautomatisch mit DeepL übersetzt.



    FileInfo hat eine Length Eigenschaft. Warum nicht die nutzen wenn die Daten eh schon geladen sind?
    -> FileInfo.Length
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Danke Euch beiden erstmal aber die Grundfunktion läuft jetzt schon.

    Nur nun will ich es noch Variable steuern. Heißt man gibt in einem Textfeld auf der Form die MB Zahl ein, ab der gesucht werden soll.

    Nun muss ich aber den String Wert aus dem Textfeld in eine Zahl umwandeln und da scheitere ich immer.
    Wie ´kann ich das bewerkstelligen


    VB.NET-Quellcode

    1. Dim DirInfo As New DirectoryInfo(path)
    2. Dim FileObj As IO.FileSystemInfo
    3. Dim MySize As String
    4. Dim mb As String
    5. mb = Me.txtMB.ToString & "000000"
    6. Dim mmb As Long
    7. mmb = CLng(Val(mb))
    8. For Each FileObj In DirInfo.GetFileSystemInfos
    9. If FileObj.Attributes = FileAttributes.Directory Then
    10. ListFiles(FileObj.FullName)
    11. Else
    12. MySize = FileLen(FileObj.FullName)
    13. If MySize >= mmb Then '50000000
    14. Me.ListBox1.Items.Add(FileObj.FullName)
    15. End If
    16. End If
    17. Next
    18. End Sub


    Da knallt er immer weil die Zahl nicht unendlich sein darf. Wo liegt hier mein Fehler

    Danke
    Holger
    wie folgt erledigt

    VB.NET-Quellcode

    1. Private Sub ListFiles(ByVal [path] As String)
    2. Dim DirInfo As New DirectoryInfo(path)
    3. Dim FileObj As IO.FileSystemInfo
    4. Dim MySize As String
    5. Dim ValMB As Integer = Nothing
    6. Dim MB As String = txtMB.Text
    7. MB = MB & "000000"
    8. ValMB = CInt(MB)
    9. For Each FileObj In DirInfo.GetFileSystemInfos
    10. If FileObj.Attributes = FileAttributes.Directory Then
    11. ListFiles(FileObj.FullName)
    12. Else
    13. MySize = FileLen(FileObj.FullName)
    14. If MySize >= ValMB Then '3900000 Then '50000000
    15. Me.ListBox1.Items.Add(FileObj.FullName)
    16. End If
    17. End If
    18. Next
    19. End Sub