Histórico da Página
...
Bloco de código | ||
---|---|---|
| ||
CpyS2T( < cFile >, < cFolder >, [ lCompress ], [ lChangeCase ], [ nLenBuffer ] )
|
Parâmetros
Nome | Tipo | Descrição | Obrigatório | Referência |
---|---|---|---|---|
cFile | caractere | Indica o arquivo no servidor que será copiado (a partir do rootpath). | X |
cFolder | caractere | Indica a pasta de destino na máquina onde está o SmartClient. | X |
lCompress | lógico | Indica se o arquivo deve ser internamente compactado antes de fazer a cópia. Default = .T. (verdadeiro) |
lChangeCase | lógico | Se verdadeiro (.T. |
), nomes de arquivos e pastas |
serão convertidos para letras minúsculas; caso contrário, falso (.F. |
), não será feito nenhum ajuste no nome do arquivo informado. Valor padrão (.T.). Veja maiores informações em Observações. | ||||
nLenBuffer | numérico | Se for informado muda o tamanho padrão do fragmento do arquivo a ser enviado. |
Retorno
Nome | Tipo | Descrição |
---|---|---|
lRet | lógico | Retorna verdadeiro (.T.), se o arquivo for copiado com sucesso; Retorna falso (.F.), em caso de falha na cópia. |
Observações
- A função CpyS2T exige que o programa AdvPL que a execute seja um SmartClient, não permitindo, portanto, que seja chamada em JOB. A partir da build 7.00.120420A, caso a função seja chamada em JOB, o programa será finalizado com ocorrência de erro fatal "Function CpyS2T() doesn't available in JOB.". Nas builds anteriores, se CpyS2T fosse chamada em JOB, ela não era executada e não gerava mensagem de advertência ou ocorrência de erro.
- O diretório no destino (client) deve existir para que a cópia seja realizada com sucesso.
- Em caso de falha, pode ser utilizada a função FError, porém não é possível saber se a falha na cópia está relacionada com algum problema de acesso na origem, no destino, ou mesmo durante a cópia. Normalmente as causas mais prováveis de falha são inconsistências nos parâmetros, como especificar um arquivo de origem que não existe, ou que esteja em uso por outro processo; ou especificar um diretório de destino que não exista; ou que o usuário que iniciou o programa não tenha direitos de escrita; falta de espaço em disco no destino durante a cópia; falha no acesso ao sistema de arquivos na pasta temporária do servidor ou do SmartClient; ou ainda o arquivo já exista no diretório de destino, e esteja em uso por outro processo.
- Caso a compactação esteja habilitada (Default = .T.), no parâmetro <lCompress>, o arquivo será compactado automaticamente no servidor antes do envio, e descompactado automaticamente no client. Para a grande parte dos tipos de arquivo, utilizar a compactação reduz o tempo de cópia, pois o conteúdo trafegado pela rede é menor. Para tráfego de arquivos que já possuem algum tipo de compressão de dados (ZIP, TAR, RAR, JPG, MPG), é mais eficiente especificar este parâmetro com .F., para que a compactação automática não seja utilizada, pois nestes casos a mesma não agregará nenhum ganho neste processo. O arquivo compactado é gravado na pasta temporária do servidor e descompactado na pasta de destino do client.
- O parâmetro opcional lChangeCase foi introduzido a partir do build 7.00.131227A e quando pois em sistemas LINUX/UNIX, existe a diferenciação entre maiúsculo e minúsculo em nomes de arquivos ou pastas. Quando este parâmetro for informado, terá prioridade sobre o comportamento de CASE SENSITIVE definido pela chave Case Sensitive definido pelas chaves de ini CASESENSITIVE ou SERVERTYPE. Porem, quando não especificado o parâmetro, o valor padrão (.T.) fica condicionado ao que está configurado nessas chaves.
- Em ambiente Windows, os nomes de arquivos e pastas não possuem diferenciação entre maiúsculo e minúsculo, logo, a função conseguirá tratar os arquivos e pastas independente do valor definido no parâmetro lChangeCase. Em ambiente Linux ou Mac, os nomes dos arquivos e pastas respeitam a diferenciação.
- Quando o SmartClient utilizado for uma build nativa Linux ou Mac, sabe-se que sistema de arquivos destas plataformas não têm unidade de disco, a nomenclatura dos arquivos é case sensitive (letras minúsculas diferente de maiúsculas), e as barras separadoras de diretório / pasta são barras normais "/" ao invés de barras inversas "\". Mesmo nestes casos, deve-se especificar uma letra de unidade de disco no diretório de destino; pois quando o SmartClient em Linux e/ou Mac receber o diretório de destino, com a unidade de disco especificada, a unidade de disco será ignorada e as barras serão internamente invertidas. Por exemplo, a cópia especificando o path de destino "C:\USER\LOCAL\TEMP\" será interpretado pelo SmartClient Linux e/ou Mac como "/user/local/temp/".
O parâmetro nLenBuffer está disponível a partir do build 20.3.2.9, a alteração do seu valor pode aumentar e/ou diminuir o consumo de memória baseado no tamanho do buffer, assim com também interferirá na taxa de transmissão do arquivo.
Buffers maiores tendem a ter uma taxa de transmissão maior, porém são mais suscetíveis as intempéries da rede, o tamanho do buffer deve ser avaliado na infraestrutura na qual ele está em uso, pois pode gerar falhas na transmissão. O comportamento padrão pode ser alterado pela configuração FileCopyOne.
Exemplos
Bloco de código | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
// Copia arquivos do servidor para o remote local, compactando antes de transmitir bOk := CpyS2T( "\BKP\MANUAL.DOC", "C:\TEMP" ) // Copia arquivos do servidor para o remote local, sem compactar antes de transmitir bOk := CpyS2T( "\BKP\MANUAL.DOC", "C:\TEMP", .F. ) |
...