Não consigo transferir arquivo do cliente para o servidor

Delphi

12/05/2013

Boa noite amigos, estou a dois meses me aventurando no mundo Delphi, e com muita ajuda das vídeo-aulas do Canal Delphi do site DevMedia eu tenho conseguido entender bastante coisa dessa linguagem maravilhosa, mas nem tudo são flores eu me deparei com esse problema criei um formulário de cadastro e apos usuário efetuar o referido cadastro a aplicação cliente deve enviar um arquivo para um servidor na rede onde já existe um diretório de pastas, porém a aplicação ainda necessita criar neste diretório mais duas pastas, não sei como fazer a verificação se a pasta existe o código abaixo adaptei de exemplos encontrados no site Club Delphi.
Busco normalmente o arquivo, e gravo o caminho do mesmo, em um edit, através da procedure abaixo:
procedure Tfrm_CadProposicao.BuscarClick(Sender: TObject);
begin
  inherited;
          begin
              OpenDialog:= TOpenDialog.Create(nil);
              OpenDialog.Title:='Selecione um Documento ...';
              OpenDialog.Filter:='Todos os Documentos Admitidos |*.pdf;*.doc;*.xls;*.txt;*.rtf;*.ttf';
                if OpenDialog.Execute then
                edtCaminho.Text:= OpenDialog.FileName;
              FreeAndNil(OpenDialog);
              btn_Enviar.Visible := True;
              txt_Mandato.Text := cbb_Mandato.Text;
              txt_Tipo.Text := cbb_TipoProposicao.Text;
          end;
end;



Depois passo oas parâmetros do origem e destino para a função CopyFile:

var 
  arquivo_origem, arquivo_destino: string; 

procedure Tfrm_CadProposicao.btn_EnviarClick(Sender: TObject);
begin
  inherited;
  arquivo_origem := edtDelphiCaminho.Text;
  arquivo_destino := '\\192.168.0.5\C:Sistema Prolegis\ARQUIVOS\PROPOSICOES\MANDATO\' + txt_Mandato.Text + '\'+ txt_Tipo.Text + '\''';
  CopyFile(PChar(arquivo_origem), PChar(arquivo_destino), True)
end;


E o resultado é simplesmente nada, não dá erro, não cria as pastas, e nem copia o arquivo selecionado.
Alguém poderia, pelo amorrrrrrrrr de Deus, me dizer o que está faltando neste código, ou o que eu fiz errado?
Celso Souza

Celso Souza

Curtidas 0

Respostas

Carlos Bernardo

Carlos Bernardo

12/05/2013

Amigo no arquivo de destino ao invés de usar C: usa C\

arquivo_destino := '\\192.168.0.5\C:'+ bla bla bla;
arquivo_destino := '\\192.168.0.5\C\'+ bla bla bla;
GOSTEI 0
Celso Souza

Celso Souza

12/05/2013

Ola Carlos! Obrigado pela atenção amigo, fiz a alteração que vc me propôs, ainda não copia nada e também não dá erro algum.
GOSTEI 0
Leonardo Xavier

Leonardo Xavier

12/05/2013

As permissões de escrita na sua pasta de ftp esta em 777 (gravação, escrita, leitura)?
GOSTEI 0
Wilson Brito

Wilson Brito

12/05/2013

Tente fazer assim:

procedure Tfrm_CadProposicao.btn_EnviarClick(Sender: TObject);
begin
inherited;
arquivo_origem := edtDelphiCaminho.Text;
arquivo_destino := '\\192.168.0.5\C:Sistema Prolegis\ARQUIVOS\PROPOSICOES\MANDATO\' + txt_Mandato.Text + '\'+ txt_Tipo.Text + '\' + ExtractFileName(edtDelphiCaminho.Text); //Informar o nome do arquivo de destino
If not DirectoryExists(ExtractFilePath(arquivo_destino)) Then //Forçar a criação dos diretórios
  ForceDirectories(ExtractFilePath(arquivo_destino));
CopyFile(PChar(arquivo_origem), PChar(arquivo_destino), True)
end;
GOSTEI 0
Diego Garcia

Diego Garcia

12/05/2013

só por desencargo, tente usar uma pasta que não tem espaços no nome, pode ser que você está tendo problemas por causa desse "Sistema Prolegis", caso funcione em um diretório sem espaços, tente passar o caminho do arquivo entre aspas.
GOSTEI 0
Rodrigo Bernal

Rodrigo Bernal

12/05/2013

Caro colega verificando conforme o colega acima postou este previlegs, provavelmente ele esta fazendo com que não grave
seguinte coloque da seguinte forma c:\suapasta\seuaquivo e verifica.
GOSTEI 0
Celso Souza

Celso Souza

12/05/2013


Boa noite Amigos
Com a ajuda de vocês, e mais a importantíssima colaboração do companheiro batera do fórum Active Delphi, conseguimos resolver o problema.
E pra quem precisar vai ai o código completo:

var
    //variáveis que armazenarão os valores para a função copyfile
     arquivo_origem, arquivo_destino: string;


procedure Tfrm_CadProposicao.btnDelphiBuscarClick(Sender: TObject);
begin
  inherited;
          begin
          //abre a janela para selecionar o arquivo
                OpenDialog:= TOpenDialog.Create(nil);
                OpenDialog.Title:='Selecione um Documento ...';
                OpenDialog.Filter:='Todos os Documentos Admitidos |*.doc;*.xls;*.txt;*.rtf;*.ttf;*.htm;*.html';
                if OpenDialog.Execute then

          //depois de selecionado o caminho do arquivo é gravado no edit
                edtDelphiCaminho.Text:= OpenDialog.FileName;
                FreeAndNil(OpenDialog);
                btn_Enviar.Visible := True;

          //os valores das combobox servem pra definir o caminho de destino, que sempre mudam
                txt_Mandato.Text := cbb_Mandato.Text;
                txt_Tipo.Text := cbb_TipoProposicao.Text;
          end;
end;


procedure Tfrm_CadProposicao.btn_EnviarClick(Sender: TObject);
begin
  inherited;
          //variável recebe o valor gravado ao buscar o arquivo
           arquivo_origem := edtDelphiCaminho.Text;

         //variável recebe o endereço do servidor e os valores passados pelas combobox ao edits e mais o nome do arquivo de origem
          arquivo_destino := '\\192.168.0.5\C\Sistema Prolegis\ARQUIVOS\PROPOSICOES\MANDATO\' + txt_Mandato.Text + '\'+ txt_Tipo.Text + '\' + ExtractFileName(arquivo_origem);

         //criando os diretorios de destino
           CreateDir('\\192.168.0.5\C\Sistema Prolegis\ARQUIVOS\PROPOSICOES\MANDATO\' + txt_Mandato.Text);
  CreateDir('\\192.168.0.5\C\Sistema Prolegis\ARQUIVOS\PROPOSICOES\MANDATO\' + txt_Mandato.Text + '\'+ txt_Tipo.Text);

         //chamada da função copy
           if CopyFile(PChar(arquivo_origem), PChar(arquivo_destino), True)=true then
  showmessage('Arquivo copiado com sucesso');
  end;


Muito bom mesmo! e em breve estarei aqui novamente com mais uma dúvida, tenho certeza disso.
Abraços e muito obrigado mesmo aos amigos pela preciosa atenção.
GOSTEI 0
POSTAR