Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Raficcha

[Resolvido] Block read com Deltphia

Recommended Posts

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.