Raficcha 1 Denunciar post Postado Março 23, 2009 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" Compartilhar este post Link para o post Compartilhar em outros sites
Raficcha 1 Denunciar post Postado Março 23, 2009 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 Compartilhar este post Link para o post Compartilhar em outros sites
Raficcha 1 Denunciar post Postado Março 23, 2009 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.. Compartilhar este post Link para o post Compartilhar em outros sites