Função para Copiar Arquivo

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Função para Copiar Arquivo

Mensagem por asimoes »

Função para copiar qq arquivo. Por exemplo longname que o COPY FILE não faz.

Código: Selecionar todos

aDir1:=Directory(cPathDBF+"*.DBF")[img][/img]

cPastaBackup:="C:\BACKUP\"

FOR I:=1 TO Len(aDir1)
   CopyFile(cPathDBF+aFiles[I,1],cPastaBackup)
NEXT

Código: Selecionar todos

FUNCTION CopyFile(cSource,cTarget)
LOCAL oFile, lOk:=.T.
   TRY
      oFile:=CreateObject("Scripting.FileSystemObject") 
   CATCH
      TRY
         oFile:=CreateObject("Scripting.FileSystemObject") 
      CATCH
         lOk:=.F.
      END
   END
   IF lOk
      TRY
         oFile:CopyFile(cSource, cTarget )
      END
   ENDIF
RETURN lOk
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Função para Copiar Arquivo

Mensagem por asimoes »

Métodos do FileSystemObject

Existem outros métodos procurar por:

FileSystemObject Methods

No MSDN


Uma correção: o COPY FILE até copia arquivos longname só não copia se houver espaços entre o nome do arquivo ex. Arquivo de Programa.txt não copia --> Arquivo_de_Programa.txt assim copia.

A função CopyFile usando o objeto FileSystemObject faz a copia sem problemas.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Função para Copiar Arquivo

Mensagem por Pablo César »

Oi Alexandre,

Em Harbour o FILE COPY funciona perfeitamente. Veja:

Código: Selecionar todos

Function Main()
Local cFile := "Teste com espaços.txt"
Local cShortFile := Space(128)

hb_MemoWrit(cFile,"Teste")

// MsgInfo(WAPI_GETSHORTPATHNAME (cFile, @cShortFile))

Copy File(cFile) to ("c:\a\"+cFile)
Return Nil
Este código me funciona normalmente em Harbour e sem precisar em converter para Short file name. Mas observe, que o caminho e o nome de destino, tem que ser fornecidos. Talvez por isso não funcionou pra você.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Função para Copiar Arquivo

Mensagem por asimoes »

Olá Pablo,

Funcionou, alguma coisa errada que estava fazendo em relação ao caminho dos arquivos, mas acontece outro problema e por este motivo eu abandonei o COPY FILE,

O copy file copia o arquivo e o arquivo copiado muda o atributo da data, para a data e hora atuais.

Como eu estou fazendo uma cópia do arquivo original para backup os atributos do arquivos não podem mudar, e com a função que postei, consigo isso.

[]´s
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Função para Copiar Arquivo

Mensagem por Pablo César »

Sim Alexandre, alguma coisa que você estaria fazendo errado e deve ser com respeito ao path ou até mesmo a falta do nome do arquivo.

Mas para título de aprendizado, você pode utilizar a função FileCopy:

FILECOPY(<cSourceFile>, <cTargetFile>, [<lMode>]) --> nCopyByte

Esta sim grava com os mesmo atributos e ainda pode setar o atributo para backup.

Voltando ao Copy File() To (), você pode ainda fazer uma rotina que leia primeiramente o atributo do arquivo com:

FileAttr()
FileDate()
FileTime()

E setá-lo conforme estava se quiser e ainda mudar o atributo com:

SetFAttr()
SetFDaTi()

Mas sempre se acha um jeito ou de outro, o importante é encontrar a solução à nossa conveniência.

Eu só me intrometi, porque vi que essa informação do COPY FILE não procedia. Mas valeu pela sua outra indicação, tudo faz parte do aprendizado.
O copy file copia o arquivo e o arquivo copiado muda o atributo da data, para a data e hora atuais.
Ahhh sim, pois ele faz um cópia com data/hora atualizados, ele cria.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Função para Copiar Arquivo

Mensagem por lugab »

Olá amigos, eu uso o Harbour 2.0 , estou com problemas no Copy File() e preciso de ajuda

Com o código abaixo o programa cria, normalmente, o arquivo Forigem na Pasta prevista,
segue executando o comando Copy File() sem acusar erros, porém o Copy File (Forigem) to (Fdestino) não copia nada

Código: Selecionar todos

ptemp="c:\servico"
Tnumusu=123
FimdeLinha="chr(13)+chr(10)"
FOrigem=pTemp+"\Orig"+strzero(tnumusu,3)+".Txt"
Fdestino=ptemp+"\Dest"+strzero(tnumusu,3)+".Txt"

Farquivo=Fcreate(Forigem,0)    
Fwrite( Farquivo,"Teste de Copia de Arquivo"+&FimDeLinha)        
Fclose(Forigem)
Copy File (Forigem) to (Fdestino)
lugab
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Função para Copiar Arquivo

Mensagem por Toledo »

Amigo, tente o seguinte:

Troque:

Código: Selecionar todos

Fclose(Forigem)
Por:

Código: Selecionar todos

Fclose(Farquivo)
Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Função para Copiar Arquivo

Mensagem por JoséQuintas »

Só comentário, aproveitando o post:
Às vezes, formatar o fonte e seguir regras, ajuda a resolver problemas.

Código: Selecionar todos

#define CRLF  Chr(13) + Chr(10)
#define FILEORIGEM    cPath + "\orig" + StrZero( nNumUsuario, 3 ) + ".txt"
#define FILEDESTINO  cPath + "\dest" + StrZero( nNumUsuario, 3 ) + ".txt"

cPath := "c:\servico"
nNumUsuario := 123

nHandle := fCreate( FILEORIGEM, 0 )
fWrite( nHandle, "Teste de copia de arquivo " + CRLF )
fClose( nHandle )

COPY FILE ( FILEORIGEM ) TO ( FILEDESTINO )
Notas:
Não existe um certo ou errado universal, cada um vai encontrando o jeito que acha melhor pra si
O melhor resultado deste uso é compilando usando "tolerância zero", -w3 -es2, pra checagem de digitação errada principalmente no uso dos #define
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Função para Copiar Arquivo

Mensagem por lugab »

Obrigado Toledo e Quintas...

Estou muito grato. A ajuda de vcs foi um sucesso
lugab
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Função para Copiar Arquivo

Mensagem por rochinha »

Amiguinhos,

O Harbour também tem: __CopyFile( nome de origem, nome de destino )
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Responder