Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
bom..
eu estou criando um objeto em Delphi .... ai.. quando tento acessar mais de duas vezes uma propriedade do objeto num while que tem "blockread'.. ele simplesmente retorno erro I/O 998.. ai uma hora eu ate conseguir (depois que criei um trilhão de variaveis)..
vejam o codigo.. eu não sei mais o que fazer.. uma coisa tão simples..
var
arq : file of byte;
arq_pacote : file of byte;
buffer: array of byte; //buffer para a gravação do arquivo
cabecalho : string; //utilizada para montar o cabeçalho do aruqivo
ch : byte; //utilizada para gravar o cabeçalho
cont, total_lido, tamanho, tam_buffer, default_buffersize : longint;
begin
default_buffersize := BufferSize;
SetLength(buffer, default_buffersize+2);
if (backup = true) then
CopyFile(pchar(Self.FileName), pchar(Self.FileName+'~~'), false);
//verificar se o pacote atual existe
if(FileExists(self.FileName)) then begin
//verificar se o arquivo a ser adicionado existe
if (FileExists(Arquivo)) then begin
try
//abrir os arquiovs
assignfile(arq, Arquivo);
assignfile(arq_pacote, Self.FileName);
reset(arq);
reset(arq_pacote);
//posicionar o pacote no filan
total_lido := 0;
{ while(not(eof(arq_pacote))) do begin
if (tamanho - total_lido > Self.writeBufferSize) then
buffer_size := Self.writeBufferSize
else
buffer_size := tamanho - total_lido;
//BlockRead(arq_pacote, buffer, buffer_size);
end; }
//preparar o cabeçalho
inc(Self.ultimo_id);
tamanho := filesize(arq);
cabecalho := char(7)+'[FILE]'+inttostr(Atributo)+inttostr(tamanho)+char(7)+inttostr(ultimo_id)+char(7)+ExtractFileName(Arquivo)+char(7)+ inttostr(id_pasta)+char(7)+palavras_chaves+char(7)+comentarios+char(7);
//gravar o cabecalho
for cont := 1 to length(cabecalho) do begin
ch := ord(cabecalho[cont]);
write(arq_pacote, ch);
end;
//gravar o arquivo
total_lido := 0;
while (not(eof(arq))) do begin
tam_buffer := tamanho - total_lido;
if (tam_buffer > length(Buffer)) then begin
tam_buffer := length(Buffer);
end;
BlockRead(arq, Buffer, tam_buffer);
BlockWrite(arq_pacote, buffer, tam_buffer);
total_lido := total_lido+tam_buffer;
end;
//fechar os arquivos
closefile(arq);
closefile(arq_pacote);
Result := true;
except
Self.Erro := mensagens[3];
end;
end
else begin
Self.Erro := mensagens[2];
Result := false;
end;
end
else begin
self.Erro := mensagens[1];
Result := false;
end;
end;
"me desculpem pela revolta.. mas é que a borland escreveu o Delphi especialmente para ser chato e não conseguir fazer coisas simples"Bom gente.. calmei.. descobri.. mas o posti fica ai.. deixem ele ai gente.. talvez alguem passe por isso um dia..
seguinte.. o Delphi não consegue usar buffers dinâmicos com blockread e nem blockwrite..
A sim.. esqueci de falar...
agora ele ate consegue fazer a função rodar.. mas ele não consegue sair da função.. se eu colocar um "showmessage('saindo')" no fim da função.. ele mostra.. mas não sai da função e da erro de acesso de memoria
a sim.. e como eu faço pra editar um post.. é que depois que a raiva passa.. a gnt precisa aruma umas merdas que posta no Imasters.. afina.. ninguem tem culpa