mehrere Dateien gleichzeitig entschlüsseln

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 40 Antworten in diesem Thema. Der letzte Beitrag () ist von Script1.

    @VaporiZed Danke ob Deiner Fürsorge. :D
    @Script1 Die ersten beiden Zeilen sind in Ordnung.
    Die dritte Zeile ist Option Strict Off.
    Probier mal

    VB.NET-Quellcode

    1. encryptedBytes = System.IO.File.ReadAllBytes(encryptedFile)

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Das habe ich gemacht, allerdings kommt jetzt bei dem Debugger:
    System.IO.IOException: "Der Prozess kann nicht auf die Datei "C:\Users\dgzf5\Desktop\LQO\26042022121404" zugreifen, da sie von einem anderen Prozess verwendet wird."

    Dies kommt genau da:

    VB.NET-Quellcode

    1. encryptedBytes = System.IO.File.ReadAllBytes(encryptedFile)
    @Script1 Ich nehme mal an, dass Du nicht Deinen Code durch meinen Code ersetzt hast, sondern Du hast Meinen Code mitten in Deinen Code eingefügt.
    Kann es sein, dass Du nicht die geringste Vorstellung von dem hast, was Du da tust?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Also ich habe das jetzt so stehen:

    VB.NET-Quellcode

    1. Public Function DecryptImage(ByVal encryptedFile As String, ByVal keyFile As String) As Image
    2. Dim encryptedBytes As Byte()
    3. encryptedBytes = System.IO.File.ReadAllBytes(encryptedFile)
    4. Using fs As New FileStream(encryptedFile, FileMode.Open)
    5. fs.Read(encryptedBytes, 0, CInt(fs.Length))
    6. End Using
    7. Dim keyBytes As Byte()
    8. Using fs As New FileStream(keyFile, FileMode.Open)
    9. keyBytes = New Byte(fs.Length - 1) {}
    10. fs.Read(keyBytes, 0, CInt(fs.Length))
    11. End Using
    12. Dim originalBytes As Byte() = New Byte(encryptedBytes.Length - 1) {}
    13. Vernam(encryptedBytes, keyBytes, originalBytes)
    14. Dim ic As New ImageConverter()
    15. Return TryCast(ic.ConvertFrom(originalBytes), Image)
    16. End Function


    Und dann kommt:
    System.IO.FileNotFoundException: "Die Datei "C:\Users\dgzf5\Desktop\AHW\26042022140711.dat.dat" konnte nicht gefunden
    @Script1 Weil die Datei
    xx.dat.dat
    heißt?
    So einen einfachen Fehler bekommst Du allein nicht hin :?:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Sicher das du ein gültigen Dateinamen verwendest?
    Aus einem deiner vorherigen posts

    VB.NET-Quellcode

    1. TB2_ScreenUhr.Text = IO.Path.GetFileName(file)
    2. Dim newImage As Image = DecryptImage(folder & TB2_ScreenUhr.Text, folder & TB2_ScreenUhr.Text & ".dat")


    IO.Path.GetFileName gibt dir auch die Extension(".dat") du hängst aber noch ein ".dat" an. Kann ja nur in die Hose gehen.
    Du musst dir auch mal die Werte aunschauen. sonst wirst du immer wieder solche Probleme bekommen.

    Debug.WriteLine(some_stuff)
    MessageBox.Show(other_stuff)

    Haltepunkte setzen und wenn der erreicht ist mal mit dem Cursor über variablen hovern.

    Diese Exception hättest du auch vermeiden können, sollte man auch. Besser eine MessageBox anzeigen, als das programm crashen lassen. Sind zwar jetzt keine Usereingaben welchen man eh nie trauen draf, aber auch ein Dev macht mal einen fehler.

    VB.NET-Quellcode

    1. if not io.file.exists("dateiname")
    2. Messagebox.Show("Datei gibt es nicht")
    3. return
    4. end if
    5. nun der funtionsaufruf

    Wie kann man dies denn machen, das er ohne dieses .dat dran hängt?

    VB.NET-Quellcode

    1. Dim folder As String = Pfad & "\" & Ordnername.Text & "\"
    2. For Each file In IO.Directory.GetFiles(folder, "*.*", IO.SearchOption.TopDirectoryOnly)
    3. TB2_ScreenUhr.Text = ""
    4. TB2_ScreenUhr.Text = IO.Path.GetFileName(file)
    5. Dim newImage As Image = DecryptImage(folder & TB2_ScreenUhr.Text, folder & TB2_ScreenUhr.Text & ".dat")
    6. ' Bild in Datei speichern:
    7. newImage.Save(folder & TB2_ScreenUhr.Text & ".jpg")
    8. Next
    Tja, nun musst du herausfinden wie man Strings verkettet, tust du ja bereits in deinem Code.

    Irgendwo da in dem Schnipsel hängst du ein ".dat" an, lass das einfach weg und gut. in TB2_ScreenUhr.Text steht das ".dat" nämlich schon drin weil du das so zugewiesen hast.

    Wenn du nun nicht auf die Lösung kommst, empfehle ich eine kleine Pause evtl. auch einen Kaffee oder Tee, dann versuch es noch mal. Manchmal sieht man es einfach nicht mehr, wenn man zu lange ohne Pause dran sitzt.

    Alternativ kannste auch GetFilenameWithoutExtension nehmen, dann haste den Dateinamen ohne ".dat"

    Wäre sogar angebracht, denn hierraus würde
    TB2_ScreenUhr.Text & ".jpg"
    dateiname.dat.jpg werden, ich kann mir nicht vorstellen das dies so gewollt ist.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Takafusa“ ()

    Danke, dies läuft soweit gut:

    VB.NET-Quellcode

    1. Dim folder As String = Pfad & "\" & Ordnername.Text & "\"
    2. For Each file In IO.Directory.GetFiles(folder, "*.*", IO.SearchOption.TopDirectoryOnly)
    3. TB2_ScreenUhr.Text = ""
    4. 'TB2_ScreenUhr.Text = IO.Path.GetFileName(file)
    5. TB2_ScreenUhr.Text = IO.Path.GetFileNameWithoutExtension(file)
    6. Dim newImage As Image = DecryptImage(folder & TB2_ScreenUhr.Text, folder & TB2_ScreenUhr.Text & ".dat")
    7. ' Bild in Datei speichern:
    8. newImage.Save(folder & TB2_ScreenUhr.Text & ".jpg")
    9. Next


    Allerdings hört die Schleife nicht auf wenn alle Bilder entschlüsselt sind:
    System.IO.IOException: "Der Prozess kann nicht auf die Datei "C:\Users\dgzf5\Desktop\TCC\26042022145343" zugreifen, da sie von einem anderen Prozess verwendet wird."
    Bilder
    • Pic_3.PNG

      40,58 kB, 840×458, 21 mal angesehen
    Stelle sicher das die Datei nirgendwo im Code mehrfach geöffnet wird. Sollte es sein, das die Datei wirklich nicht geöffnet ist wenn du sie einlesen/beschreiben willst, starte mal den rechner neu, ich hatte das auch schon mal das ein FileHandle nicht freigegeben wurde.

    Alternativ zum neustart kannst du auch mit Tools schauen ob die Datei bereits geöffnet ist.

    Mit dem Tool kannste die Datei notfalls auch selbst wieder freigeben(ohne neustart)
    chip.de/downloads/Unlocker_18414122.html

    Mit dem Tool kannste schauen welche dateien geöffnet sind
    nirsoft.net/utils/opened_files_view.html

    Und deine Schleife wird beendet, sogar das komplette Programm da dies ein "Absturz" ist.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Takafusa“ ()

    Script1 schrieb:

    Am besten mit Dispose() oder?
    Nein.
    Ordne Deinen Code!
    Der Fehler war doch vorher auch nicht da.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

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

    @Script1
    ich hatte Dich schon in Post 9 darauf hingewiesen, dass Du die geänderten Files im selben Ordner wie die Quell Files speicherst.
    Die For each Schleife wird auch versuchen die neuen Dateien zu bearbeiten.
    Kunst kommt von können und nicht von wollen, sonst hieße es Wunst!