Página 1 de 1

Mudar atributos de um arquivo

Enviado: 18 Abr 2009 09:46
por clodoaldomonteiro
Olá galera!

Queria saber se no harbour tem alguma função para mudar os atributos de arquivo, aqueles R S H, pois com o attrib do DOS sempre aparece uma tela preta.

Re: Mudar atributos de um arquivo

Enviado: 18 Abr 2009 10:08
por Maligno
Função SetFAttr(<arquivo>,<atributo>), com os códitos de atributo iguais aos da função FCreate() do Clipper, onde são acrescentados apenas o 8 para "volume" e o 32 pra "archived". Os códigos podem ser combinados, claro.

Mudar atributos de um arquivo

Enviado: 25 Nov 2016 10:15
por spereira
Bom dia,

O meu arquivo está com os atributos +R+H+S.
Durante o processo tenho que o passar para -R-H-S para que possa ser visualizado e trabalhado e, depois tenho passá-lo novamente para +R+H+S, uma vez que há outros programas antigos que o utilizam desta forma.
O fato é que com a função SetFAttr( "PONTO.DBF", "-R-H-S" ) ele funciona corretamente, mas quando executo a função para retornar como estava antes não funciona, e faço desta forma SetFAttr( "PONTO.DBF", "+R+H+S" ).

Há alguma outra forma de fazê-lo?

Obrigado.

Mudar atributos de um arquivo

Enviado: 25 Nov 2016 10:20
por Jairo Maia
Olá Sérgio,

Já tentou sem o atributo "H" (hiden)? Acho que terá o mesmo efeito e será achado para voltar os atributos.

Mudar atributos de um arquivo

Enviado: 25 Nov 2016 10:59
por spereira
Já tentei agora sem o H mas sem sucesso, também tentei SetFAttr( "PONTO.DBF", "RHS" ) e SetFAttr( "PONTO.DBF", 124 ) também sem sucesso.

Descobri uma forma de fazer, que serve para o que eu preciso que é imprimir uma lista de ponto apenas, que é utilizar o COPY FILE deste arquivo para outro temporário e este arquivo é criado sem estes atributos e assim posso trabalhar. Mas para outra aplicação que eu precisar manipular os dados não sei como fazer.

Obrigado.

Mudar atributos de um arquivo

Enviado: 25 Nov 2016 11:29
por lugab
Bom dia, pessoal.
Peço licença pra pegar carona nesse post e esclarecer o que segue:

Eu uso Hb20+Bcc e gostaria de tornar um executável "ReaOnly" e depois Desfazer o Atributro
Tentei isso e não deu erro de compilação, porém não aconteceu nada com o executavel:

Código: Selecionar todos

 SetFAttr( "PROG.EXE", "+R" )  
//Para Desfazer: SetFAttr( "PROG.EXE", "-R" )

O que devo faxzer ?

Mudar atributos de um arquivo

Enviado: 25 Nov 2016 11:38
por Jairo Maia
Olá Sérgio Pereira,
Uma pergunta que pode ser idiota, mas você tem certeza que está fechando o arquivo antes de voltar os atributos?

Olá lugab,
Você está tentando fazer isso pelo próprio executável? Lembre-se que para alterar atributos o arquivo não pode estar em uso, ou seja, tem que estar fechado.

Mudar atributos de um arquivo

Enviado: 25 Nov 2016 12:17
por spereira
Olá Jairo,

Sim, fechei a área do arquivo, aliás eu tinha esta dúvida e testei com close all e o resultado foi o mesmo.
Acredito que tenha algum bug nesta função do harbour.

Obrigado.

Mudar atributos de um arquivo

Enviado: 25 Nov 2016 13:24
por lugab
Sim, Jairo, o programa em execução é TESTE.EXE e o que eu quero mudar atributos é PROG.EXE
lugab, você está tentando fazer isso pelo próprio executável? Lembre-se que para alterar atributos o arquivo não pode estar em uso, ou seja, tem que estar fechado.

Mudar atributos de um arquivo

Enviado: 26 Nov 2016 11:37
por Jairo Maia
Olá Pessoal,

Realmente a função SetFAttr() não funciona, trata-se realmente de um bug dessa função que é da lib HbCT.Lib, não é do Harbour. Mas a função Hb_FSetAttr() funciona perfeitamente, e a forma de passar os parâmetros é a mesma da SetFAttr():

Código: Selecionar todos

Function Main()

 Clear Screen
 ?
 ?
 
 Hb_FSetAttr( "xx.prg", 1 )  // Read Only
 Hb_Run( "Attrib xx.prg" )
 ?

 Hb_FSetAttr( "xx.prg", 2 )  // Hiden
 Hb_Run( "Attrib xx.prg" )
 ?

 Hb_FSetAttr( "xx.prg", 4 )  // System
 Hb_Run( "Attrib xx.prg" )
 ?

 Hb_FSetAttr( "xx.prg", 3 )  // Read Only, Hiden
 Hb_Run( "Attrib xx.prg" )
 ?

 Hb_FSetAttr( "xx.prg", 5 )  // Hiden, System
 Hb_Run( "Attrib xx.prg" )
 ?

 Hb_FSetAttr( "xx.prg", 7 )  // Read Only, Hiden, System
 Hb_Run( "Attrib xx.prg" )
 ?

 Hb_FSetAttr( "xx.prg", 0 )  // volta os atributos
 Hb_Run( "Attrib xx.prg" )

Return Nil

Mudar atributos de um arquivo

Enviado: 26 Nov 2016 13:12
por lugab
Funcionou, Jairo, muito obrigado

Só acho que não é possível executar uma única vez o HB_FsetAttr() para alterar o atributo de vários arquivos,tipo "*.dbf"

Mudar atributos de um arquivo

Enviado: 26 Nov 2016 15:20
por Jairo Maia
Olá Lugab,

Não dá. Ele atua em um arquivo por vez, mas algo assim não ajudaria?:

Código: Selecionar todos

/*
  Incluir a lib HBCT.LIB
*/

Function Main()
 Local x, aFiles, cCaminho
 Private cFile
 
 cCaminho := DiskName() + ":" + DirName() + "\"
 
 aFiles := Directory( cCaminho + "*.DBF" )

 Clear Screen
 ?
 ?
 
 For x=1 To Len( aFiles )
 
  cFile := aFiles[ x, 1 ]

  Hb_FSetAttr( cFile, 1 )  // Read Only
  Hb_Run( "Attrib &cFile." )
  Inkey(0)
  
  If LastKey() = 27  // ESC sai...
   Exit
  EndIf
  
 Next
 
Return Nil
Para voltar os atributos repete o processo com o parâmetro 0 (zero).

Mudar atributos de um arquivo

Enviado: 26 Nov 2016 18:54
por lugab
Sim, Jairo , a solução é essa mesmo, só que ficou muito mais lento do que fazer

Código: Selecionar todos

"Hb_Run attrib +r *.dbf"
O problema do "hb_run" é a tela preta