Image zu String, auch für andere (beliebige) Dateien ?

  • VB.NET

Es gibt 41 Antworten in diesem Thema. Der letzte Beitrag () ist von asusdk.

    hm ok das ist dann natürlich nicht gut, wenn dabei unterschiedliche Ergebnisse herauskommen, werde es dann doch mit deiner Urprünglichen konfiguration nutzen.

    im Grunde bin ich nur auf die ganze Idee gekommen, weil ich einfach keine Möglichgkeit gefunden habe wie z.B.

    (Pseudocode):
    for each res as resource in my.resources
    Dim binaryData() As Byte = res
    Dim fs As New FileStream(FilePathAndName, FileMode.CreateNew)
    fs.Write(binaryData, 0, binaryData.Length)
    fs.Close()
    next

    also dachte ich halt das es als String dann derartige Möglichkeiten eröffnen könnte (theoretisch eben) ;)
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If
    Ach ups, bei dem Teil hast natürlich auch überhaupt nicht gemacht, was ich sehen wollte.
    Guck dir doch mal den MSDN link an, da steht genau die Methode die du brauchst, die (wie oben bereits geschrieben) Teil von "My.Resources.ResourceManager" ist.
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    sorry, ich weiss nciht warum jeder immer davon ausgeht das ich mir die Links nicht angucke^^ das tue ich sehr wohl, allerdings hilft mir der msdn-Link absolut gar nicht weiter.... ironischer weise wie die meisten der msdn-links


    Edit:
    @ErfinderDesRades

    hab grad nochmal alles durchgetestet wenn ich die datei mit deiner Methode zu einem String wandle :

    VB.NET-Quellcode

    1. Dim ms = New MemoryStream()
    2. Using fs = New FileStream(FilePathAndName, FileMode.Open), zipper = New GZipStream(ms, CompressionMode.Compress)
    3. fs.CopyTo(zipper)
    4. Return Convert.ToBase64String(ms.ToArray)
    5. End Using


    entsteht danach beim zurückwandeln leider eine defekte datei - die sich nicht mehr öffnen lässt

    VB.NET-Quellcode

    1. Using ms = New MemoryStream(Convert.FromBase64String(CompressedBase64String)), unzipper = New GZipStream(ms, CompressionMode.Decompress), fs = New FileStream(FilePathAndName, FileMode.CreateNew)
    2. unzipper.CopyTo(fs)
    3. End Using
    4. MessageBox.Show("File restored", "Info")




    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If

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

    Davon bin ich nur ausgegangen, weil in deinem Code die im MSDN-Link gezeigte Methode gar nicht auftaucht.^^
    Auch My.Resources.ResourceManager steht nirgends in deinem Code, dabei müsste man die einfach nur miteinander kombinieren.(Übergabeparameter natürlich noch entsprechend wählen. erster dürfte CurrentUICulture passen, die beiden anderen einfach true)
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    das ist nicht meine Methode, sondern deine . Meine steht in post#14


    das ist Sie fast 1zu1, nur aus pth wurde FilePathAndName und aus s64 wurde CompressedBasestring, das sind aber nur die namen davon die sich geändert haben, der rest ist doch 1zu1 ?? also es geht um die 2te methode , um den string wieder zur File zu machen
    ausser du meinst den Filemode von fs, der stand beim ersten versuch so wie bei deiner methode auf Create, da war die datei allerdings bereits nicht mehr funktionsfähig, also dachte ich ich probiere es mit CreateNew

    @jvbsl naja ich kann die Methode aus dem link nicht nacharbeiten, wenn ich diesen zu 0% verstehe....

    @ErfinderDesRades ok,ok, mein Fehler in der methode die die File zum String wandelt darf das Return nicht in den Using Block wandern, Sorry, und danke nochmal
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „asusdk“ ()

    Herzlichen Glückwunsch zur Hartnäckigkeit:

    VB.NET-Quellcode

    1. My.Resources.ResourceManager.GetResourceSet(CultureInfo.CurrentUICulture,True,True)
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    @jvbsl danke dir schon mal für die Hilfe, jetzt meckert er beim erstellen der Schleife nicht mehr rum, ABER das hilft leider dennoch nicht weiter...

    wie komme ich dann innerhalb dieser Schleife an den Namen der jeweiligen Resource (.name oder ähnliches gibt es nicht)
    wie komme ich an den Datentyp (bzw. die extension) der Resource (MessageBox.Show(Res.GetType.ToString) zeigt nur "system.collections.dictionary.entry")

    aktuell würde die methode nur dann was nutzen wenn ich herausbekommen will wieviele Dateien in den Resourcen sind...

    evtl. ist noch unklar was ich erreichen will :

    (PseudoCode)
    For Each File in My.Resources
    Filewrite(File.Name,"Pfad")
    next
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If
    Es gibt Res.Key und Res.Value
    Res.Value ist ein object, was für Bilder vom Typ Bitmap sein sollte für Textdateien string etc.

    Ich glaub die enthalten aber tatsächlich nur die Keys und nicht die kompletten Dateinamen(müsstest aber ausprobieren)

    Ansonsten ist evtl. auch dies hier passender:

    VB.NET-Quellcode

    1. Dim assembly = Assembly.GetExecutingAssembly()
    2. assembly.GetManifestResourceNames()

    Und hiermit kommst an den Datenstrom

    VB.NET-Quellcode

    1. assembly.GetManifestResourceStream(name)

    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---

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

    bah vor lauter Name hast mich durcheinander gebracht^^
    Key ists natürlich, ist schließlich nen DictionaryEntry^^

    Edit: Und das byte[] array ist natürlich für die Binärdaten komplett sinnvoll. Müsstest also nurnoch mittels IO.File.WriteAllBytes abspeichern...
    Aber wie gesagt, ich denke der Key enthält nicht die Dateiendung, deshalb ist evtl. das oben genannte doch sinnvoller...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    ich würds sehr gerne ausprobieren, aber als was soll ich Assembly deklarieren ?

    VB.NET-Quellcode

    1. Dim assembly = Assembly.GetExecutingAssembly()
    2. assembly.GetManifestResourceNames()


    Dim Assambly as What?

    Edit:

    ok scheint trotz Option Strict On kein "As" zu benötigen

    Also an scih könnte man es sicher so machen, aber wenn ich mir die einzelnen Einträge anzeigen lasse(MessageBox) kommmt erstmmal:

    ApplicationName.Form1Name.resources,
    ApplicationName.resources.resources
    ApplicationName.Form2Name.resources
    ApplicationName.Form3Name.resources

    und dann erst der Name der ersten Resource


    gut ich habs schon mal soweit bekommen, das er mir alle Dateien die er Auflistet auch entpackt:

    VB.NET-Quellcode

    1. Dim assemblyd = Assembly.GetExecutingAssembly()
    2. For Each assString As String In assemblyd.GetManifestResourceNames()
    3. If Not IO.File.Exists("C:\Users\marco\Desktop\" & assString.Replace(Application.ProductName & ".", "")) Then
    4. Dim FS As New FileStream("C:\Users\marco\Desktop\" & assString.Replace(Application.ProductName & ".", ""), FileMode.CreateNew)
    5. assemblyd.GetManifestResourceStream(assString).CopyTo(FS)
    6. FS.Close()
    7. End If
    8. Next


    aber @jvbsl er schreibt auch 4 weitere dateien, (die oben erwähnten) wie könnte ich das denn evtl. noch unterbinden ?

    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „asusdk“ ()