none
extrair todos os arquivos de uma resources

    Question

  • como faço pra extrair vários arquivos da resources?

    o código que uso pra extração é esse:
    SaveToDisk("teste.exe", Environment.GetEnvironmentVariable("APPDATA") & "\...\...\teste.exe")

    Lembrando que teste.exe é o nome do arquivos a ser extraido, ou seja, o que coloco no luga dele? 

    Thursday, August 16, 2012 2:16 PM

All replies

  • tenta isso:

    My.Resources.NomeDoArquivo

    Thursday, August 16, 2012 2:30 PM
  • tenta isso:

    My.Resources.NomeDoArquivo

    como pode ver na imagem tem vários arquivo na resources.

    Exemplo:

    SaveToDisk("Allresources", Environment.GetEnvironmentVariable("APPDATA") & "\...\...\allresources")

    onde tem Allresources é pra o VB entender que eu quero que ele extraia todos os items que tem na resources.

    e do jeito que tava: SaveToDisk("teste.exe", Environment.GetEnvironmentVariable("APPDATA") & "\...\...\teste.exe") o VB só extrai o teste.exe

    Thursday, August 16, 2012 2:42 PM
  • Vais ter que criar um loop e pegar um de cada vez.


    http://malange-levi.blogspot.co.uk/

    Thursday, August 16, 2012 3:40 PM
  • Como que farei isso?

    SaveToDisk("teste1", Environment.GetEnvironmentVariable("APPDATA") & "\...\...\teste1")

    SaveToDisk("teste2", Environment.GetEnvironmentVariable("APPDATA") & "\...\...\teste2")

    SaveToDisk("teste3", Environment.GetEnvironmentVariable("APPDATA") & "\...\...\teste3")

    vou ter que fazer isso para todos?

    Thursday, August 16, 2012 4:37 PM
  • Isso deve te ajudar:

      Dim dictEntry As DictionaryEntry
      Dim runTimeResourceSet As System.Resources.ResourceSet = My.Resources.ResourceManager.GetResourceSet(System.Globalization.CultureInfo.InvariantCulture, True, False)
    
      For Each dictEntry In runTimeResourceSet
            MessageBox.Show(dictEntry.Key)
      Next
    http://stackoverflow.com/questions/1000510/how-to-get-the-names-of-all-resources-in-a-resource-file
    • Edited by Frank Pinheiro Thursday, August 16, 2012 6:02 PM referência
    Thursday, August 16, 2012 6:00 PM
  • Isso deve te ajudar:

      Dim dictEntry As DictionaryEntry
      Dim runTimeResourceSet As System.Resources.ResourceSet = My.Resources.ResourceManager.GetResourceSet(System.Globalization.CultureInfo.InvariantCulture, True, False)
    
      For Each dictEntry In runTimeResourceSet
            MessageBox.Show(dictEntry.Key)
      Next

    http://stackoverflow.com/questions/1000510/how-to-get-the-names-of-all-resources-in-a-resource-file

    Desculpa mas o que eu faço com isso?

    Thursday, August 16, 2012 6:32 PM
  • Você precisa do nome dos itens que estão no seu resource, se você colocar o código para rodar vai perceber que ele te retorna exatamente os nomes dos itens que estão no seu resource, portanto...

    pegue sua função, coloque dentro do for e use o dictEntry.Key que é onde está o nome do item do resource.

    caso de algum erro... é só postar.
    • Edited by Frank Pinheiro Thursday, August 16, 2012 8:29 PM Complementar
    Thursday, August 16, 2012 8:14 PM
  • Você precisa do nome dos itens que estão no seu resource, se você colocar o código para rodar vai perceber que ele te retorna exatamente os nomes dos itens que estão no seu resource, portanto...

    pegue sua função, coloque dentro do for e use o dictEntry.Key que é onde está o nome do item do resource.

    OK, deu pramin entender um pouco (pós sou iniciante)

    mas o problema é: são 1.059 itens! como e eles estão com nomes diferentes. e não posso renomear.


    • Edited by Czarxd Thursday, August 16, 2012 8:30 PM
    Thursday, August 16, 2012 8:30 PM
  • Tenta fazer isso:

     Dim dictEntry As DictionaryEntry
     Dim runTimeResourceSet As System.Resources.ResourceSet = My.Resources.ResourceManager.GetResourceSet(System.Globalization.CultureInfo.InvariantCulture, True, True)
     'aqui ele vai percorrer todo o seu Resource, pegando item por item e tentando gravar ele no lugar que você estipular
     For Each dictEntry In runTimeResourceSet
         SaveToDisk(dictEntry.Key, Environment.GetEnvironmentVariable("APPDATA") & "\...\...\" & dictEntry.Key)
     Next

    Thursday, August 16, 2012 8:35 PM
  • Tenta fazer isso:

     Dim dictEntry As DictionaryEntry
     Dim runTimeResourceSet As System.Resources.ResourceSet = My.Resources.ResourceManager.GetResourceSet(System.Globalization.CultureInfo.InvariantCulture, True, True)
     'aqui ele vai percorrer todo o seu Resource, pegando item por item e tentando gravar ele no lugar que você estipular
     For Each dictEntry In runTimeResourceSet
         SaveToDisk(dictEntry.Key, Environment.GetEnvironmentVariable("APPDATA") & "\...\...\" & dictEntry.Key)
     Next

    não funcionou, ele não copia os itens da resources pra página que coloquei não...


    como coloquei o que vc disse:

            Dim dictEntry As DictionaryEntry
            Dim runTimeResourceSet As System.Resources.ResourceSet = My.Resources.ResourceManager.GetResourceSet(System.Globalization.CultureInfo.InvariantCulture, True, True)
            'aqui ele vai percorrer todo o seu Resource, pegando item por item e tentando gravar ele no lugar que você estipular
            For Each dictEntry In runTimeResourceSet
                SaveToDisk(dictEntry.Key, Environment.GetEnvironmentVariable("APPDATA") & "\pasta1\pasta2" & dictEntry.Key)
            Next


    • Edited by Czarxd Thursday, August 16, 2012 10:18 PM
    Thursday, August 16, 2012 10:17 PM
  • não funciona.
    Friday, August 17, 2012 4:16 PM
  • O seu problema não parece ser o mesmo, agora o VS ta dizendo que tem um Caractere inválido no seu documento.

    Dentro desse seu procedimento SaveToDisk você deve estar usando o  System.IO.File.WriteAllBytes ou algo para passar os arquivos do Resource para o disco e nessa hora ele retorna que existe um caractere inválido no documento.

    Tenta abrir um documento, ir na linha e coluna informa... arrumar o caractere e rodar novamente o programa... isso deve diminuir seu warning de 56 para 55... caso aconteça isso você já sabe o que deve fazer.

    Tuesday, August 21, 2012 12:49 PM
  • O seu problema não parece ser o mesmo, agora o VS ta dizendo que tem um Caractere inválido no seu documento.

    Dentro desse seu procedimento SaveToDisk você deve estar usando o  System.IO.File.WriteAllBytes ou algo para passar os arquivos do Resource para o disco e nessa hora ele retorna que existe um caractere inválido no documento.

    Tenta abrir um documento, ir na linha e coluna informa... arrumar o caractere e rodar novamente o programa... isso deve diminuir seu warning de 56 para 55... caso aconteça isso você já sabe o que deve fazer.

    Em todo meu VB não tem System.IO.File... e como coloco dentro do SaveToDisk?

    Meu SaveToDisk:

        Public Sub SaveToDisk(ByVal resourceName As String, ByVal fileName As String)
            ' Get a reference to the running application.
            Dim assy As [Assembly] = [Assembly].GetExecutingAssembly()
    
            ' Loop through each resource, looking for the image name (case-insensitive).
            For Each resource As String In assy.GetManifestResourceNames()
                If resource.ToLower().IndexOf(resourceName.ToLower) <> -1 Then
                    ' Get the embedded file from the assembly as a MemoryStream.
                    Using resourceStream As System.IO.Stream = assy.GetManifestResourceStream(resource)
                        If resourceStream IsNot Nothing Then
                            Using reader As New BinaryReader(resourceStream)
                                ' Read the bytes from the input stream.
                                Dim buffer() As Byte = reader.ReadBytes(CInt(resourceStream.Length))
                                Using outputStream As New FileStream(fileName, FileMode.Create)
                                    Using writer As New BinaryWriter(outputStream)
                                        ' Write the bytes to the output stream.
                                        writer.Write(buffer)
                                    End Using
                                End Using
                            End Using
                        End If
                    End Using
                    Exit For
                End If
            Next resource
        End Sub

    Uma imagem da coluna e linha do warning.

    Tuesday, August 21, 2012 10:25 PM
  • UP - UP
    Saturday, August 25, 2012 6:44 PM
  • UP  -  UP
    Tuesday, August 28, 2012 1:00 PM
  • Eu tenho um código mas so funciona para cada ficheiro. 

    System.IO.File.WriteAllBytes(IO.Path.Combine("Diretorio", "Nome do ficheiro.exe"), My.Resources.nomedoficheiro_no.resources)
    
    'Exemplo
    
    System.IO.File.WriteAllBytes(IO.Path.Combine(My.Computer.FileSystem.SpecialDirectories.Desktop, "Bloco de Notas.exe"), My.Resources.NotePad3)


    Meu novo programa (Bloco de Notas) http://hyrokumata-app.blogspot.pt/2012/07/notepad-3-beta.html

    Friday, August 31, 2012 4:18 PM
  • Ainda não conseguir resolver meu problema.
    Monday, September 03, 2012 7:19 PM