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

Por Favor Me Ajudem


Massonetto

Pergunta

Olá pessoal,

sou iniciante no delphi e to fazendo um simples código de teste, só pra testa, é o seguinte:

procedure TForm1.Button1Click(Sender: TObject);
var
buf : tmemorystream;
buf2 : tmemorystream;
texto : array [0..999999] of char;
l : integer;
begin
buf := tmemorystream.Create;
buf.LoadFromFile('c:/teste.mp3);
buf2 := tmemorystream.Create;
l := buf.Read(texto,sizeof(texto));
buf2.Write(texto,sizeof(texto));
buf2.SaveToFile('c:/teste2.mp3');
buf.Free;
buf2.Free;
end;

o que eu faço e copia um arquivo pra memoria e depois salva ele denovo no meu pc, como se tivesse copiando, bom o erro é o seguinte, quando o arquivo é pequeno dá td certo, só q quando ele é maior, uma musica como no caso, ele copia ateh +/- os primeiro 1 mb, depis para , ai a musica fica imcompleta, se eu tento aumenta o númeos de array dá um erro chama "Stack OverFlow". Se alguém poder me ajudar ficaria muito grato... ah e já tentei pelo TFileStream, mas não se o que acontece q ele tb no copia. Desde já agradeço pela atençao!!

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Colega, quando você faz:

buf := tmemorystream.Create;
buf.LoadFromFile('c:/teste.mp3);
você já está alocando memória e transferindo o arquivo p/ a memória alocada. Quando você faz:
l := buf.Read(texto,sizeof(texto));
você copia os bytes da memória já alocada p/ outra parte de memória; ou seja; você utiliza memória em dobro. Quando você faz:
buf2.Write(texto,sizeof(texto));
você aloca outro trecho de memória e faz a cópia dos bytes; ou seja; você está alocando memória triplamente. Se for uma simples cópia você pode fazer:
buf := tmemorystream.Create;
buf.LoadFromFile('c:/teste.mp3);
buf.SaveToFile('c:/teste2.mp3');
buf.Free;
Quanto ao stack overflow, existe um limite p/ arrays estáticos que normalmente é 1MB; então você pode aumentar este limite em:Project/Options/Linker/Max stack size. Ou também definir um array dinâmico e alocar memória´p/ ele:
texto : array of char;
SetLength(texto, buf.Size);

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,4k
×
×
  • Criar Novo...