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: 20416
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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: 4666
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Curtiu: 1 vez
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