Página 1 de 1

Função para Copiar Arquivo

Enviado: 18 Abr 2014 12:07
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

Função para Copiar Arquivo

Enviado: 18 Abr 2014 12:12
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.

Função para Copiar Arquivo

Enviado: 18 Abr 2014 14:21
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ê.

Função para Copiar Arquivo

Enviado: 18 Abr 2014 16:46
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

Função para Copiar Arquivo

Enviado: 18 Abr 2014 19:32
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.

Função para Copiar Arquivo

Enviado: 29 Ago 2016 22:09
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)

Função para Copiar Arquivo

Enviado: 30 Ago 2016 07:34
por Toledo
Amigo, tente o seguinte:

Troque:

Código: Selecionar todos

Fclose(Forigem)
Por:

Código: Selecionar todos

Fclose(Farquivo)
Abraços,

Função para Copiar Arquivo

Enviado: 30 Ago 2016 21:48
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

Função para Copiar Arquivo

Enviado: 31 Ago 2016 09:51
por lugab
Obrigado Toledo e Quintas...

Estou muito grato. A ajuda de vcs foi um sucesso

Função para Copiar Arquivo

Enviado: 01 Set 2016 15:41
por rochinha
Amiguinhos,

O Harbour também tem: __CopyFile( nome de origem, nome de destino )