GARANTIR DESCONTO

Fórum Carregar String em tipo File ??? #294195

01/09/2005

0

bem amigos estou com uma grande bronca estou querendo carregar dados de um arquivo e passar informações do tipo string para file

var
F : file;
Atr : String;
begin

[b:673e05a42f] if ExtractFileExt(filename) = ´.zip´ then begin
Zip.FileName:= filename;
Zip.OpenArchive;
Zip.FindFirst(´*.nes´, AI);
Zip.ExtractToString (AI.FileName, Atr);
end;[/b:673e05a42f]
FileMode:= fmOpenRead;
AssignFile(F, Filename);
Reset(F, 1);


BlockRead(F , ROMHeader, SizeOf(ROMHeader), i);

Ps: ROMHeader e uma variavel global.
Tenho que carregar em F o arquivo extraido do arquivo zipado Atr, como posso realizar esta função.

Obrigado galera...


Sremulador

Sremulador

Responder

Posts

02/09/2005

Massuda

...estou querendo carregar dados de um arquivo e passar informações do tipo string para file
String e File são tipos de dados que não podem ser convertidos de um para o outro.
...Tenho que carregar em F o arquivo extraido do arquivo zipado Atr...
Talvez ficasse mais simples se você gravasse o arquivo que você extrai do ZIP e depois lesse desse arquivo e não do ZIP original; para isso funcionar, basta incluir, dentro do if, a gravação do arquivo extraído e atualizar o valor de Filename, o resto continua igual (provavelmente precisa apagar o arquivo depois que terminar de utilizá-lo).


Responder

Gostei + 0

02/09/2005

Sremulador

Bem amigo massuda se possivel fosse passar qualquer tipo stream para file já quebraria o galho, Memorystream, Filestream...

Quanto a extrair e jogar em uma area fisica acho que não seria uma boa alternativa, pois caso houver qualquer tipo de erro no sistema ele pode ficar ocioso :(

Valeu...


Responder

Gostei + 0

02/09/2005

Massuda

...se possivel fosse passar qualquer tipo stream para file já quebraria o galho...
O problema é que File (assim como todas as functions/procedures que usam um File) assume que estamos falando de algo que está no disco e, como você mesmo escreveu, não é o caso.

Talvez valesse a pena você reescrever a parte que carrega a ROM no seu programa de modo a essa parte usar streams ao invés de um File. Por exemplo, um esqueleto baseado no que você postou seria (não testei)...
var 
  Stream: TStream;
  S: string;
...
  if ExtractFileExt(Filename) = ´.zip´ then begin 
    // é um arquivo zipado
    ...
    Zip.ExtractToString (AI.FileName, S); 

    Stream := TStringStream.Create(S);
  end
  else begin
    // é um arquivo normal
    Stream := TFileStream.Create(Filename, fmOpenRead);
  end; 

  Stream.ReadBuffer(ROMHeader, SizeOf(ROMHeader)); 
...
  // lembre de fazer Stream.Free depois que não precisar mais da stream
...



Responder

Gostei + 0

02/09/2005

Sremulador

valeu massuda funcionou :)


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar