Como copiar apenas um arquivo para vários diretórios listados na Listbox1

Delphi

10/07/2018

A tempos testo e pesquiso sobre o assunto e sem solução, gostaria de ajuda sobre o tema. Já muito foruns que é sempre Copiar um arquivo ou muitos arquivos para outro diretório. Más, como copiar apenas um arquivo para um determinado número de pastas?
aqui vai um pequeno trecho:
var
destino: string;
origem: string;
i: integer;
begin
origem := Edit1.text; // caminho do arquivo

if opendialigo1.execute then
begin
Listbox1.Items.add(OpenDialig1.FileName);
end

for i := 0 ListBox1.Items.Count -1 do

Copy(Pchar(Origem), Pchar(ListBox1.Items[i], true);
end;
Dernivaldo Silva

Dernivaldo Silva

Curtidas 0

Melhor post

Raimundo Pereira

Raimundo Pereira

10/07/2018

Boa tarde.
Fiz um exemplo hoje 10.07.2018
Veja se é isso que você precisa: https://youtu.be/t_shsbaDhT0
GOSTEI 2

Mais Respostas

Dernivaldo Silva

Dernivaldo Silva

10/07/2018

Olá P2, verei sim, te passo um feed amanhã...
GOSTEI 0
Dernivaldo Silva

Dernivaldo Silva

10/07/2018

P2, vi seu vídeo e gostei do que vi, vc pode disponibilizar os fontes para eu analisar?
GOSTEI 0
Raimundo Pereira

Raimundo Pereira

10/07/2018

interface

uses
  Shellapi, // << Não esqueça de add Shellapi
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;

type
  TFP = class(TForm)
    Panel_Geral: TPanel;
    Lista_Destinos: TListBox;
    Btn_carregar: TButton;
    Panel1: TPanel;
    Btn_add_list: TButton;
    OpenDialog1: TOpenDialog;
    Btn_Copy_all: TButton;
    Label1: TLabel;
    Edt_pasta_dest: TEdit;
    edt_camiho_completo_arquivo_Origem: TEdit;
    Label3: TLabel;
    Btn_Seleciona_arquivo_origem: TButton;
    Label4: TLabel;
    Edt_arq_origem: TEdit;
    procedure Btn_carregarClick(Sender: TObject);
    procedure Btn_add_listClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Btn_Copy_allClick(Sender: TObject);
    procedure Btn_Seleciona_arquivo_origemClick(Sender: TObject);
    procedure Edt_pasta_destKeyPress(Sender: TObject; var Key: Char);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FP: TFP;
  // Não esqueça de add
  Caminho_Lista:string;
  Arquivo_Dest,Arquivo_Origem:string;
  ComandoCopy:string;
  // Não esqueça de add ^

implementation

{$R *.dfm}


// Adiciona pasta de destino + arquivo
procedure TFP.Btn_add_listClick(Sender: TObject);
begin
  if not(DirectoryExists(Edt_pasta_dest.Text)) then
  begin
    ShowMessage('Verifique a pasta de destino');
    abort;
  end;
  Arquivo_Dest:=Edt_pasta_dest.Text + Edt_arq_origem.Text;

  Lista_Destinos.Items.Add(Arquivo_Dest);

  Lista_Destinos.Items.SaveToFile(Caminho_Lista);
  end;


procedure TFP.Btn_carregarClick(Sender: TObject);
begin

     if FileExists(Caminho_Lista) then
     begin
     Lista_Destinos.Clear;
     Lista_Destinos.Items.LoadFromFile(Caminho_Lista);
     end
     else
     begin
     Lista_Destinos.Items.SaveToFile(Caminho_Lista);
     end;
end;

procedure TFP.Btn_Copy_allClick(Sender: TObject);
var
  I: Integer;
begin
if Edt_arq_origem.Text='' then
begin
   ShowMessage('Você precisa selecionar um arquivo para cópia');
end
else
begin


Lista_Destinos.Update;
Lista_Destinos.ItemIndex:=0;

// O segredo do que você precisa ocorre aqui
// É realizado um for na listbox e atualizando apenas o param  Arquivo_Dest
// Em seguida o ShellExecute executa o comando completo ComandoCopy
for I := 0 to Lista_Destinos.Items.Count-1 do
begin
//Captura o listbox de acordo com i
Lista_Destinos.ItemIndex:=i;
//Atualiza os dados Arquivo_Dest
Arquivo_Dest:=Lista_Destinos.Items[Lista_Destinos.ItemIndex];
// Atualiza o ComandoCopy
ComandoCopy:='copy "'+Arquivo_Origem+'" "'+Arquivo_Dest+'" /y';
// Executa o comando
ShellExecute(0, nil, 'cmd.exe', PWideChar('/c ' + ComandoCopy), nil, 0);
end;
end;
end;

procedure TFP.Btn_Seleciona_arquivo_origemClick(Sender: TObject);
begin
  OpenDialog1.Title := 'Selecione o arquivo de origem!';
  OpenDialog1.Execute();

  Arquivo_Origem:=OpenDialog1.FileName;

  edt_camiho_completo_arquivo_Origem.Text        := Arquivo_Origem;
  Edt_arq_origem.Text       := ExtractFileName(OpenDialog1.FileName);


end;

procedure TFP.Edt_pasta_destKeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then
begin
  Btn_add_listClick(self);
end;
end;
GOSTEI 0
Dernivaldo Silva

Dernivaldo Silva

10/07/2018

Obrigado, irei testar agora..
GOSTEI 0
Dernivaldo Silva

Dernivaldo Silva

10/07/2018

p2, testei seu código e caiu como uma luva. <br />
<br />
<br />
Obrigado
GOSTEI 0
POSTAR