Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Buffer/packed/array


DiabloX3

Pergunta

Olá. Peguei uma função na internet mas não compreendi com exatidão como que ela funciona, aliás, gostaria de saber também se tem um jeito de interpretá-las por si só, tipo, onde pesquisar pra entender o que cada coisa está fazendo.

Porém também me pergunto se precisamos sempre saber tudo o que acontece na função/procedure para colocarmos no sistema? Por exemplo, quando peguei o código que desabilita o X da janela, não entendi muito bem aquele esquema dos manipuladores e tal, mas coloquei no código, rodei e ele desabilitou sem mesmo eu saber "como" ...

//Copia arquivo
function TForm1.FileCopy(source,dest: String): Boolean;
var
fSrc,fDst,len: Integer;
size: Longint;
buffer: packed array [0..2047] of Byte;
begin
if source <> dest then
   begin
   fSrc := FileOpen(source,fmOpenRead);
   if fSrc >= 0 then
      begin
      size := FileSeek(fSrc,0,2);
      FileSeek(fSrc,0,0);
      fDst := FileCreate(dest);
      if fDst >= 0 then
         begin
         while size > 0 do
               begin
               len := FileRead(fSrc,buffer,sizeof(buffer));
               FileWrite(fDst,buffer,len);
               size := size - len;
               end;
         FileSetDate(fDst,FileGetDate(fSrc));
         FileClose(fDst);
         FileSetAttr(dest,FileGetAttr(source));
         Result := True;
         end
      else
         begin
         ShowMessage('OPS!');
         Result := False;
         end;
      FileClose(fSrc);
      end;
   end;
end;
Quando vou passar o debug no while alí, tem umas variáveis que recebem o array (acho que o len), é uns valores meio cabulosos ehehe e é ruim não saber pra que eles servem. o mesmo acontece com a variável
buffer: packed array [0..2047] of Byte;

packed array? O que muda para o simples array? E essas 2047 posições é um valor padrão? O ideal é mantê-la ou posso diminuir pra ocupar menos espaço? Ou até depende do tamanho do arquivo que estou tentando copiar?

Gostaria de saber também se esse pode ser um método de copiar arquivo de banco de dados como sendo um backup ou se não é aconselhável e por quê.

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0
Olá. Peguei uma função na internet mas não compreendi com exatidão como que ela funciona, aliás, gostaria de saber também se tem um jeito de interpretá-las por si só, tipo, onde pesquisar pra entender o que cada coisa está fazendo.
tem um jeito de interpretá-las por si só ?

Tudo vai depender do seu nivel conhecimento e aprendizado ... por isso existem tutoriais, apostilas, biblias e o mais importante o help que vem com o delphi. Muito de suas dúvidas podem ser esclarecidas por ele ( help ).

Porém também me pergunto se precisamos sempre saber tudo o que acontece na função/procedure para colocarmos no sistema?
O ideal é saber tudo, ou seja, "o porque", "para que" e "como usar" determinada função ou comando para obter um determinado resultado dentro do seu programa.
Quando vou passar o debug no while alí, tem umas variáveis que recebem o array (acho que o len), é uns valores meio cabulosos ehehe e é ruim não saber pra que eles servem.
Por isso há a necessidade de se ler muito sobre o assunto e principalmente experimentar, testar e compreender o porque das coisas.
function TForm1.FileCopy(source,dest: String): Boolean;
Veja que a função que voce postou é para copiar um arquivo de um lugar para outro e retorna um true ou false ( boolean ) se a operação for bem sucedida ou não. Não vou me aprofundar nos comandos da função, pois cabe a voce ler mais sobre o assunto, mas para dar um exemplo a sua pergunta.
buffer: packed array [0..2047] of Byte;
packed array ? O que muda para o simples array ? E essas 2047 posições é um valor padrão ? O ideal é mantê-la ou posso diminuir pra ocupar menos espaço ? Ou até depende do tamanho do arquivo que estou tentando copiar ?
1 - arrays , tambem conhecido como vetores, é usado para indexar uma coleção de dados, que podem ser inteiros, strings, records, bytes ...etc 2 - byte é um tipo inteiro que ocupa 8 bits de formato e esta na faixa de valores de 0 a 255 3 - packed ou pacote ou empacotamento é usado para compactar tipos de dados complexos para realizar um trabalho menor exemplo: Empacotando um registro para reduzir o trabalho
type
  // Declare an unpacked record
  TDefaultRecord = Record
    name1   : string[4];
    floater : single;
    name2   : char;
    int     : Integer;
  end;

  // Declare a packed record
  TPackedRecord = Packed Record
    name1   : string[4];
    floater : single;
    name2   : char;
    int     : Integer;
  end;

var
  defaultRec : TDefaultRecord;
  packedRec  : TPackedRecord;

begin
  ShowMessage('Tamanho do registro padrão = '+IntToStr(SizeOf(defaultRec)));
  ShowMessage('Tamanho de registro empacotado = '+IntToStr(SizeOf(packedRec)));
end;

Saida do código:

   Tamanho do registro padrão = 20
   Tamanho de registro empacotado = 14
OBS: Este exemplo serve para demonstrar que ao usar packed, comprimimos os dados para executar um trabalho menor e mais rapido.
buffer: packed array [0..2047] of Byte;

Então voce percebe que cada vetor desse array empacotado pode receber valores de 0 a 255 para o tipo byte

as 2047 posições não são um valor padrão, mas uma definição do possivel numero maximo do buffer, que pode ocorrer durante o processamento da função durante a leitura do buffer

Como disse o ideal é que o programador saiba exatamente o que cada comando do delphi faz e entender a lógica de funcionamento .... como dizia meu professor: " O computador é um Burro rápido " Só faz mais rapidamente o que voce lhe ensina ( programar )

abraço

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...