Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

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

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 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 às perguntas 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!   21-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  
Krad Nale

Scan de hd no delphi - lento !

Recommended Posts

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
  • Autor do tópico
  • 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
  • Autor do tópico
  • 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
    Guest LucianoRamone

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

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 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

    Entre para seguir isso  





    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

    Direitos autorais

    Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

    ×