Não consigo transferir arquivo do cliente para o servidor
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:
Depois passo oas parâmetros do origem e destino para a função CopyFile:
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?
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
Curtidas 0
Respostas
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;
arquivo_destino := '\\192.168.0.5\C:'+ bla bla bla;
arquivo_destino := '\\192.168.0.5\C\'+ bla bla bla;
GOSTEI 0
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
12/05/2013
As permissões de escrita na sua pasta de ftp esta em 777 (gravação, escrita, leitura)?
GOSTEI 0
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
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
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.
seguinte coloque da seguinte forma c:\suapasta\seuaquivo e verifica.
GOSTEI 0
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