Ir para conteúdo
Fórum Script Brasil
  • 0

Arquivos Binários


Andersonjb

Pergunta

E aiii pessoal, beleza? Bem to com uma duvida de arquivos aqui. Bem, eu queria fazer o seguinte:

Eu queria pegar um arquivo binário qualquer, pegar um arquivo texto, e substituir o texto do arquivo binário por um texto normal, a partir de um determinado ponto. Por exemplo, eu tenho o offset do arquivo, que e a variavel que eu defino aonde esta uma determinada letra no arquivo, por ordem sequencial a partir do zero. Por exemplo:

Jaba

Offset de J = 0

Offset de a = 1

Offset de b = 2

Offset de a = 3

So que eu estou com duvida de como fazer isso. Até agora eu fiz o seguinte, li o arquivo binário, li o arquivo normal, define o ponto de substituição, so que não sei como montar meu laço For, olhem só:

        Dim arquivosaida As FileStream = New FileStream(nomerom, FileMode.Create, FileAccess.Write)
        Dim binariosaida As BinaryWriter = New BinaryWriter(arquivosaida, System.Text.Encoding.GetEncoding(28591))
        Dim leia As New IO.StreamReader(nomescript)
        Dim letra, script As String
        Dim qt As Double = 0
        Dim marca As Boolean

        For Each letra In 
            MsgBox(script = leia.Read)
            If qt = 256 Then
                marca = True
            End If
            If marca = True Then
                binariosaida.Write(Asc(letra))
                qt = qt + 1
            End If
            If qt = 260 Then
                marca = False
            End If
        Next
        arquivosaida.Close()
        binariosaida.Close()

alguém ai pode me dar uma esclarecida?

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

Não, Gray, eu não pego os bytes do arquivo porque eu vo manipular coisa grande, arquivos de até 700 Megas. Eu simplesmente to criando a Stream e girando o arquivo, e substituindo os dados a partir de um ponto determinado. Agora, eu realmente acho que tem essa história dos dois bytes por causa disso:

Você pode verificar se este caracter que você está escrevendo tem apenas um byte olhando se na posição posterior a qual ele é inserido permanece o mesmo byte que estava antes.

E não permance, sempre modifica.

Alguma opnião?

Link para o comentário
Compartilhar em outros sites

  • 0

Não, Gray, eu não pego os bytes do arquivo porque eu vo manipular coisa grande, arquivos de até 700 Megas. Eu simplesmente to criando a Stream e girando o arquivo, e substituindo os dados a partir de um ponto determinado.

Mas, System.Text.Encoding.Unicode.GetBytes() pega os bytes de um *único* caracter e não o arquivo todo. Como você faz a alteração no arquivo dentro do loop?

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Assim:

arquivo.Seek(x - 1, IO.SeekOrigin.Begin)
Dim l As Char = caracteres(j)
arquivo.Write(l)

Simplesmente assim, movo o arquivo pra posição que eu quero, e escrevo, retirando o caracter de uma matriz de caracteres.

Link para o comentário
Compartilhar em outros sites

  • 0

Assim:

arquivo.Seek(x - 1, IO.SeekOrigin.Begin)
Dim l As Char = caracteres(j)
arquivo.Write(l)
Simplesmente assim, movo o arquivo pra posição que eu quero, e escrevo, retirando o caracter de uma matriz de caracteres.
Aí é que está. Faça o seguinte:
arquivo.Seek(x - 1, IO.SeekOrigin.Begin)
Dim l As Char = caracteres(j)
dim b() as Byte = System.Text.Encoding.Unicode.GetBytes(l)
MessageBox.Show("Tamanho em bytes do caracter: " & b.Length.ToString())
MessageBox.Show("Valor do primeiro byte do caracter: " & b(0).ToString())
MessageBox.Show("Valor do segundo byte do caracter: " & b(1).ToString())
arquivo.Write(l)

Execute isso acima e veja se agora você vai entender o que eu estou falando.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Nossa, nunca imaginaria que isso estivesse acontecendo, :blink: . Pra mim, o caracter só possuia 1 byte, nada mais que isso.

Bem, como posso escrever caracteres de apenas 1 byte no arquivo, o correto seria fazer isso, certo?

arquivo.Write(b(0))

Mas o arquivo continua não funcionando. Eu estou fazendo certo?

Link para o comentário
Compartilhar em outros sites

  • 0

Nossa, nunca imaginaria que isso estivesse acontecendo, :blink: . Pra mim, o caracter só possuia 1 byte, nada mais que isso.

E isso era assim (1 caracter = 1 byte) até certo tempo atrás. Mas, para felicidade geral das nações, isso foi mudado. :D

Bem, como posso escrever caracteres de apenas 1 byte no arquivo, o correto seria fazer isso, certo?

arquivo.Write(b(0))

Mas o arquivo continua não funcionando. Eu estou fazendo certo?

Sim, essa é a idéia. Você tornou a confirmar se agora muda apenas um byte?

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Sim, mas o arquivo continua se corrompendo da mesma maneira. Acho que não é esse o problema do meu programa. :(

Você tem absoluta certeza de que você *pode* trocar o byte (ou um byte)? Não estaria sendo feita uma verificação de checksum do arquivo? Se for este o caso, trocar um único byte já declararia o arquivo como corrompido.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Tenho, eu edito o arquivo normalmente, inclusive o mesmo byte em um Editor Hexadecimal e o arquivo continua normal.

Não estaria sendo feita uma verificação de checksum do arquivo? Se for este o caso, trocar um único byte já declararia o arquivo como corrompido.

Não entendi, o que é checksum?

Link para o comentário
Compartilhar em outros sites

  • 0
Tenho, eu edito o arquivo normalmente, inclusive o mesmo byte em um Editor Hexadecimal e o arquivo continua normal.

Hummm... você está realmente abrindo o arquivo com o encoding Default? Se você abrir com outro encoding é bem provável que ele vá ficar mesmo corrompido.

Não estaria sendo feita uma verificação de checksum do arquivo? Se for este o caso, trocar um único byte já declararia o arquivo como corrompido.

Não entendi, o que é checksum?

Checksum é uma denominação geral para qualquer cálculo de integridade de dados. Basicamente é um cálculo que você faz e de acordo com a resposta você sabe se o arquivo está íntegro ou não.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...