ALOCAR ARQUIVO BINARIO EM UMA VARIAVEL

DANLEONHART 28/12/2011 18:25:09
#392065
Seguinte...

Uso o script a seguir para salvar no disco um arquivo que está em binário:

Open [Ô]C:\Meu Arquivo.mp4[Ô] For Binary Access Write As #fileNum


Quero saber se é possível aloca-lo em uma variavel, ao invés de salvar no disco...
tipo assim

Dim vArq
Open vArq For Binary Access Write As #fileNum


Gostaria de tirar mais essa dúvida com os mais experientes
KERPLUNK 29/12/2011 09:38:03
#392097
Se vc se refere apenas ao caminho do arquivo:

Dim vArq
vArq = [Ô]C:\pasta\arquivo.mp4[Ô]
Open vArq For Binary Access Write As #fileNum


Se vc se refere ao CONTEÚDO do arquivo em uma variável:
Dim vArq
vArq = [Ô]C:\pasta\arquivo.mp4[Ô]
Open vArq For Binary As #fileNum
Dim aS As String
aS = Space(LOF(fileNum))
Get fileNum, , aS
Close fileNum
DANLEONHART 29/12/2011 12:58:32
#392113
OK KERPLUNK
é a segunda opção mesmo...

só me diz...
então o arquivo está alocado na variável vArq ???

se eu pegar essa variavel e colocar (por exemplo) para o componente do WMP executar, ele vai executar ?

porque eu pego o arquivo (independente do formato) e passo para binario assim:

fileNum = FreeFile

Open [Ô]C:\Foto.jpg[Ô] For Binary Access Read As #fileNum

ReDim b(1 To LOF(fileNum))

Get fileNum, , b()

Close fileNum


ou seja, ele está na variável [Ô]fileNum[Ô] na forma de Bytes...
agora quero pegá-lo dessa variável, sem precisar salvar em disco, e converte-la de volta para seu formato de origem...entendes ?
EPISCOPAL 29/12/2011 13:44:27
#392117
Pode tambem usar a seguinte sintaxe:

dim conteudo as string
dim ArqFree as integer

ArqFree = FreeFile

Open sFile For Input As #ArqFree
Conteudo = Input(LOF(ArqFree), #ArqFree)
Close #ArqFree
KERPLUNK 29/12/2011 14:29:17
#392124
Citação:

então o arquivo está alocado na variável vArq ???


Exatamente


Citação:

se eu pegar essa variavel e colocar (por exemplo) para o componente do WMP executar, ele vai executar ?


Ora, experimente e veja o que acontece. Eu nunca precisei fazer isso, mas acho que funciona sim...
DANLEONHART 29/12/2011 16:15:07
#392132
Seguinte...

Para não ter que colocar um componente WMP, resolvi usar um arquivo de imagem como teste...


Então (se eu estiver errado me corrijam), declarei no General Declarations assim:

Option Explicit
Dim b() As Byte
Public fileNum As Long


Para que as variáveis sejam válidas em todo o Form...

passo a imagem para binário assim:

Sub Para_Bytes()

fileNum = FreeFile

Open [Ô]C:\Foto.jpg[Ô] For Binary Access Read As #fileNum

ReDim b(1 To LOF(fileNum))

Get fileNum, , b()

Close fileNum

End Sub


Creio que na variável [Ô]fileNum[Ô] está o arquivo em binário...

se em tempo de execução eu quiser recuperar este arquivo de binário para o formato imagem
não apenas para fazer assim ?

Sub D_Bytes()
Dim Conteudo As String
Dim ArqFree As Integer
Dim vImage As IPictureDisp

ArqFree = FreeFile

Open fileNum For Input As #ArqFree
Conteudo = Input(LOF(ArqFree), ArqFree)
Close #ArqFree

Set vImage = LoadPicture(Conteudo)

Ima1.Picture = vImage

End Sub


Pessoal, me mostrem onde estou errando !

KERPLUNK : Fiz como você falou, e de todo jeito o arquivo é carregado no disco.
KERPLUNK 29/12/2011 16:48:17
#392134
No caso do Loadpicture, não. Loadpicture, requer como parâmetro um arquivo físico e não um buffer.
é possível converter a leitura do binário em uma picture mas qual o objetivo disso? Você pode simplesmente fazer:
Ima1.Picture = LoadPicture([Ô]C:\pasta\arquiv.jpg[Ô])
DANLEONHART 29/12/2011 17:17:08
#392135
Só estudo mesmo

Eu já suspeitava que não iria funcionar...pois é preciso um arquivo no disco...
DANLEONHART 06/01/2012 11:13:07
#392545
Reabrindo o tópico...

Quero colocar o arquivo que está em forma de Bytes de volta ao seu formato de origem (uma imagem), só que sem precisar colocá-lo no disco...pois se utilizo o [Ô]Open ... For Binary[Ô]
ele acaba alocando o arquivo no disco...tem como fazer isso sem alocar no disco ? e sim em uma variável ?!
para passar para o formato de imagem basta instanciar a variável como [Ô][txt-color=#0000f0]IPictureDisp[/txt-color][Ô]
KERPLUNK 06/01/2012 11:23:59
#392548
Deixa ver se entendi, vc quer gravar um arquivo, sem que seja no disco?? Pelo que entendi, vc lê um arquivo de imagem, aloca o conteúdo, e quere regravar esse mesmo conteúdo, é isso? Não to entendendo o que vc quer fazer. Parece que quer fazer um novo formato...
DANLEONHART 06/01/2012 12:09:56
#392553
Não, não...
Apenas fazer o inverso da primeira ação...com o detalhe de que [Ô]não[Ô] quero utilizar o Disco para alocar o arquivo, e sim uma variável...
ou seja, na primeira ação eu passo de imagem para Bytes (imagem que estava no Disco);
agora eu quero passar de Bytes para imagem novamente...sem utilizar o disco...entendes ?!
Tópico encerrado , respostas não são mais permitidas