file.exist und file. delete Probleme ... Irgendwie ist da der Wurm Drin :(

  • VB.NET
  • .NET (FX) 4.0

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    file.exist und file. delete Probleme ... Irgendwie ist da der Wurm Drin :(

    Schönen Guten Abend :)

    Ich habe Probleme bei folgenden Bereichen: file.exist und file.Delete ...

    Die Fehlermeldung lautet: exist ist kein Member von String und delete ist kein Member von String

    Einmal ein kurzer ausschnitt der Source dazu:

    VB.NET-Quellcode

    1. ​#Region "Datein Löschen"
    2. Public Sub DeleteFile(ByVal filename As String)
    3. If file.Exists(file) Then
    4. file.Delete(file)
    5. End If
    6. End Sub
    7. Public Sub DeleteFiles()
    8. Dim document As New XmlDocument
    9. Dim hash As New hash
    10. document.Load("DeleteList.xml")
    11. If (file.Exists(file) AndAlso (hash.GetMD5Hash(file) = thehash)) Then
    12. file.Delete(file)
    13. End If
    14. DeleteFile("DeleteList.xml")
    15. End Sub
    16. #End Region


    und folgende Variablen:

    VB.NET-Quellcode

    1. Dim imFileList As List(Of ImgFileInfo) = New List(Of ImgFileInfo)
    2. Dim file As String = imFileList(0).Path
    3. Dim thehash As String = imFileList(1).Hash
    4. Public Class ImgFileInfo
    5. Public Property Path As String
    6. Public Property Hash As String
    7. End Class


    Basierend auf diese Filelist:

    VB.NET-Quellcode

    1. ​#Region "Fileinfo von FileList"
    2. For Each el As XElement In fl.Root.Elements("Fileinfo")
    3. Dim flFileInfo As ImgFileInfo = New ImgFileInfo
    4. flFileInfo.Path = el.Element("File").Value
    5. flFileInfo.Hash = el.Element("Hash").Value
    6. imFileList.Add(flFileInfo)
    7. Next
    8. #End Region
    9. #Region "Fileinfo von DeleteList"
    10. For Each el As XElement In dl.Root.Elements("Fileinfo")
    11. Dim dlFileInfo As ImgFileInfo = New ImgFileInfo
    12. dlFileInfo.Path = el.Element("File").Value
    13. dlFileInfo.Hash = el.Element("Hash").Value
    14. imFileList.Add(dlFileInfo)
    15. Next
    16. #End Region



    Hätte da jemand einen Anreiz für mich, wo ich mich verdacht habe bzw worauf ich mein Augenmerk legen muss ?

    Bin schon Ganz Mürbe im Kopp ^^

    Ich Danke euch schon einmal im voraus für Anregungen :D

    Grüße,
    Sonaca

    Sonaca schrieb:

    Public Sub DeleteFile(ByVal filename As String)
    If file.Exists(file) Then
    file.Delete(file)
    End If
    End Sub

    Du übergibst filename, verwendest es aber nie.
    Du verwendest file.
    Angenommen, dass damit System.IO.File angesprochen wird, solltest du vielleicht die Parameter der Exists-Methode mal anschauen.
    Du übergibst wieder "file". Dasselbe file, das du als schon als Klasse verwendet hast?

    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „petaod“ ()

    Du hast eine komplett Fehlerhafte Struktur. Angefangen bei der XML-Verarbeitung:
    Man kann XMLs weitaus einfacher und effektiver verarbeiten, sieh dir dazu mal dieses Tut an: Xml verarbeiten mit Intellisense (Schema und XDocument)
    Beziehungsweise noch besser wäre wenn du einfach ein typisiertes DataSet nutzt.
    Dann hast du die file-Variable, auf die du immer wieder zugreifst, dass du da spätestens beim zweiten Anlauf ins Leere greifst ist klar.
    Mir erschließt sich auch nicht der Sinn von dieser Passage nicht:

    VB.NET-Quellcode

    1. ​Dim imFileList As List(Of ImgFileInfo) = New List(Of ImgFileInfo)
    2. Dim file As String = imFileList(0).Path
    3. Dim thehash As String = imFileList(1).Hash
    4. Public Class ImgFileInfo
    5. Public Property Path As String
    6. Public Property Hash As String
    7. End Class

    Ist das der ganze Code? Wenn nein poste bitte den ganzen Code dazu, mit solchen Flicken kann ich nix anfangen.


    LG

    Sonaca schrieb:

    Die Fehlermeldung lautet: exist ist kein Member von String und delete ist kein Member von String
    Das direkte Problem ist der schlecht gewählte Name einer KlassenVariable.
    Indem du file as String als Klassenvariable einführst, denkt der Compiler natürlich, die wäre gemeint, wenn du File.Exists(blabla) irgendwo hinschreibst. Aber du meinst ja System.IO.File, und nicht die file-Klassenvariable. Wie gesagt: kann der Compiler nicht wissen, er sagt dir einfach, wie's ist: ein String hat keine .Exists-Funktion.

    Mein Tipp generell: Private KlassenVariablen mit _-Prefix ausstatten, dann kommen diese Namenskonflikte nicht mehr vor. (Weitere Namenskonflikte, etwa mit Public Membern können natürlich dennoch auftreten)

    Sonaca schrieb:

    Werde mir von nun an andere Namen einfallen lassen müssen für KlassenVariablen
    wie gesagt: wirklich neues Ausdenken ist nichtmal erforderlich: einfach _ davorsetzen, und 90% der Konflikte sind weg.
    Noch besser ist natürlich, wenn man die KlassenVariablen gleich ganz weglassen kann - das geht in vielen Fällen nämlich auch.

    Auch sonst kann deine Klasse sicher so einiges an Verbesserung vertragen - die Delete-Funktionen wären vollkommen üflüssig, wenn du FileInfo, DirectoryInfo für dich arbeiten lassen tätest.
    Komisch, dasses noch kein Tut dazu gibt, nur vereinzelte Bemerkungen habich gelegentlich hinterlassen, zB System.IO Namespace richtig nutzen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()