• Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   14-02-2016

      Prezados membros do Fórum do Clube do Hardware,

      Está aberto o processo de seleção de novos moderadores para diversos setores do fórum. Os requisitos são:
        Pelo menos 1000 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas ao formulário abaixo:    Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • dif

      Poste seus códigos corretamente!   22-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Entre para seguir isso  
Seguidores 0
Krad Nale

Scan de hd no delphi - lento !

10 posts neste tópico

Olá ! ! !

Estou trabalhando num projeto futuro (o quanto é futuro depende deste problema), e preciso de ajuda ...

Sigam esses passos :

- Coloque um componente Outline (Guia Win3.1);

- Na propriedade Lines, coloque uma única linha contendo ... "C:\";

- Na propriedade "Item Separator" apague o valor padrão (deve ficar sem nada);

- Coloque uma caixa de lista de arquivo (FileListBox - Guia Win3.1);

- Clique na propriedade "FileTypes" e defina como "TRUE" apenas as subpropriedades "ftNormal" e "ftDirectory";

- Clique no Outline e defina sua propriedade "Align" como "alClient" (isso deve ocultar a caixa de lista de arquivo : é proposital);

- Coloque as seguites linhas em seu manipulador de evento "OnExpand":

==============================================

procedure TForm1.Outline1Expand(Sender: TObject; Index: Integer);

VAR N : LongInt;

   S : String;

begin

if Tag > 0 then Exit;

 With Outline1, Items[index] do

  begin

    S := FullPath;

    if (S[Length(S)] = '\') then

      begin

        FileListBox1.Directory := S;

        For N := FileListBox1.Items.Count - 1 downto 0 do

         begin

           S := FileListBox1.Items[N];

           if S[1] = '[' then

             begin

               S := Copy(S, 2, Length(S));

               S[Length(S)] := '\';

             end;

             if S = '.\' then CONTINUE;

             if S = '..\' then CONTINUE;

             AddChild(Index, S);

         end;

      end;

  end;

end;

==============================================

- Coloque as seguintes linhas no manipulador de evento "OnActivate" do formulário :

==============================================

procedure TForm1.FormActivate(Sender: TObject);

VAR A : LongInt;

begin

Outline1.ItemSeparator := '';

A := 0;

 With Outline1 do

  REPEAT

    A := A + 1;

    Items[A].Expanded := True;

    Application.ProcessMessages;

  UNTIL A = ItemCount;

  Tag := 1;

  ShowMessage('Feito ! ! !');

end;

==============================================

- Execute ("Run - Run" ou pressionando F9);

A dúvida é : porquê demora tanto ? Não só na minha máquina, mas levei o executável pronto pra outra máquina (mas num HD menor), e houve uma demora em varrer algumas pastas do HD ... vou testar numa máquina com 8Gb e / ou 10Gb (meu HD é de 10Gb, duas partições de 5Gb). Mas por favor, se conseguirem descobrir o problema, serei muito grato ! ! !

Eu estou rodando sob Delphi 3, mas acho que a versão não é tão relevante ....

Espero que consigam ! ! !

Até mais ! ! !

Krad Nale

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, Serial_Killer ! ! !

Presumindo que você saiba ou programe em Delphi (não importa a versão), vou explicar a minha intenção :

Estou estudando até alguns backdoors, mas a minha intenção é criar um P2P. O que é isso ? Aplicativos do tipo Napster. Seria muito mais simples que o Napster, lógico, mas com opções como COMPARTILHAMENTO DE TODOS OS ARQUIVOS DO COMPUTADOR. Entendeu ? É aí que eu tô travado. Imagina quando eu for programar os downloads ... :-)

Realmente, gostaria muito de que alguém me ajudasse. Por quê, se já tenho o source elaborado ? Gostaria que fizesse o teste. DEMORA MUITO ! ! ! Em vista do Windows ... faça este teste : Clique em "Iniciar - Localizar - Arquivos ou Pastas", depois coloque a máscara "*.*" no campo "Nome", e no campo "Examinar", coloque C:. Tenho, atualmente, uns 12.000 ou mais arquivos. Em uns 4 segundos, ele localiza 10.000 e apenas interrompe a pesquisa porque pede que eu "procure algo de útil". No programa em Delphi ele "chora" pra fazer 1.000 ...

Minha solução foi a seguinte : o usuário pode colocar até 10 locais (pastas) para compartilhar, e o programa escaneia também as subpastas. Mas se você quiser compartilhar a unidade inteira, tudo bem, mas demora ...

Espero que alguém venha com uma boa sugestão (não me venham com "escreva em C", por favor ! ! !), mas parece que esse será o formato final. Por enquanto, estudarei as conexões via TSocket, chat e downloads (eu ainda vou me f**** com isso ... ai ai ai ! ! !), e se aparecer um bom source, muito obrigado, e se o programa for realmente feito, terei prazer de creditar e enviar uma cópia ... é muita pretensão, eu sei, ainda mais que vou usar com meus colegas ... mas tudo bem.    :-)

Bem, até a próxima ! ! !

Krad Nale ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu testei o programinha e eu não achei lento não, na partição q eu testei tem quase 1 gb de arquivos e demorou +- 1 minuto.

Eu achei a ideia do projeto bem legal!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Karo amigo,

tenho a rotina que você precisa... ai vai.

na aplicacao servidora coloque este procedimento tem que receber os dados do soquete do cliente e ele executa a operacao

do tipo

procedure TFrmServer.ServerSocketClientRead(Sender: TObject;

 Socket: TCustomWinSocket);

var

mensagem, Parametro: string;

begin

{Recebemos a string}

mensagem:= Socket.ReceiveText;

{Inserimos no LOG}

Info.Lines.Add(Socket.RemoteAddress+' - '+mensagem);

{extrai parametros se houver (todos os comandos têm 5 caracteres)}

Parametro := Copy (mensagem, 6, Length (mensagem) - 5);

{executa comparações de String para chamar funcões}

If(Pos('User!', mensagem)=1)Then

Socket.SendText('ListaHDD'+Mudadir);

end;

function TFrmServer.MudaDir(Diretorio: String): String;

var

Aux:String;

I:Integer;

begin

Aux:=DirectoryListBox.Directory;

If(Pos(Diretorio,AUX)=0)Then

begin

If(Aux[Length(Aux)]<>'\')Then

Aux:=Aux+'\';

DirectoryListBox.Directory:=Aux+Diretorio;

end

else

begin

For I:=Length(Diretorio) DownTo 1 Do

If(Diretorio='\')Then

Delete(Aux,I,Length(Aux)-I);

end;

Result:='Dire!'+FileListBox.Items.Text

end;

na aplicacao cliente utilize esta rotina no recebimento de dados

procedure TFrmClient.ClientSocketRead(Sender: TObject;

 Socket: TCustomWinSocket);

var

mensagem, Parametro        : String;

begin

If comando vido do soquete Then

ListaDiretorios(Copy(Parametro,6,Length(Parametro)));

qualquer dúvida entre em contato...

utilize componentes da alça win31 eles sao mais rápidos..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito Obrigado ! ! !

Escaneando a partição inteira (ou a C: ou a minha D:) demora muito, tenho mais de 2Gb ocupados. Mas descobri o porquê da demora ...

São 2 manipuladores de evento : um do Form que ativa o scan, e outro do outline. Rodando o app, o manipulador percorre os itens e os expande (definindo OUTLINE.ITEMS.EXPANDED como TRUE - I faz parte de um loop que vai de 1 até o final do outline e ITEMS[1] é o primeiro item). Neste exato momento ocorre o evento ONEXPAND do outline, que pega o diretório expandido, o define como o diretório da caixa de lista de arquivo  e adiciona todas as pastas e arquivos sob esse diretório. Aí vem a questão :

Se o arquivo for um subdiretório, tudo bem. No próximo evento ONEXPAND ele será a pasta atual da caixa de lista. Mas, e se for um arquivo normal ? Ele sai do manipulador de evento ! ! ! Por isso, ele perde muito tempo verificando o que é pasta e o quê não é ! ! ! Está aí o motivo da demora.

Consegui fazer outra versão, mas ao invés da caixa de lista, estou usando as funções FINDFIRST / FINDNEXT  e FINDCLOSE. Eles operam em um nível mais baixo, já que não contam com objetos ou GUI ... mas a velocidade não é maior, mas o espaço em disco ocupado pelo app é bem menor, fora o desafio de achar arquivos no escuro ! ! Hehe ...

E a dica dos TSockets ... bem legal, valeu, No Suffer !

Até mais ! ! !

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hummm...Demora? Sera q uma desfragmentada num ajudaria não????

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu pelas dicas ! ! !

Mas o formato do programa é este :

- Usuário escolhe até 10 locais (pastas) para compartilhar;

- Na inicialização, o aplicativo roda o Scan de arquivos;

- O aplicativo coloca a lista de arquivos on-line para que outros usuários do programa possam acessar e baixar os arquivos;

- Ao mesmo tempo ele pode ver os arquivos dos outros usuários.

Claro, se o doido quiser compartilhar o local C: inteiro, o problema é dele (hehehe! ! !), pois o scan varre as pastas a cada inicialização. Beleza ?

Mandem mais dicas ! ! ! Tem um pessoal envolvido num projeto semelhante, e sugeri este. Quem quiser contribuir, me contate ! ! !

Até mais . . .

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!


Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.


Entrar agora
Entre para seguir isso  
Seguidores 0