Mudar atributos de um arquivo

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
clodoaldomonteiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 821
Registrado em: 30 Dez 2006 13:17
Localização: Teresina-PI
Contato:

Mudar atributos de um arquivo

Mensagem 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.
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: Mudar atributos de um arquivo

Mensagem 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.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
spereira
Usuário Nível 2
Usuário Nível 2
Mensagens: 85
Registrado em: 19 Jul 2004 11:42
Localização: Porto - Portugal

Mudar atributos de um arquivo

Mensagem 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.

Sérgio Pereira
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Mudar atributos de um arquivo

Mensagem 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.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
spereira
Usuário Nível 2
Usuário Nível 2
Mensagens: 85
Registrado em: 19 Jul 2004 11:42
Localização: Porto - Portugal

Mudar atributos de um arquivo

Mensagem 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.

Sérgio Pereira
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Mudar atributos de um arquivo

Mensagem 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 ?
lugab
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Mudar atributos de um arquivo

Mensagem 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.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
spereira
Usuário Nível 2
Usuário Nível 2
Mensagens: 85
Registrado em: 19 Jul 2004 11:42
Localização: Porto - Portugal

Mudar atributos de um arquivo

Mensagem 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.

Sérgio Pereira
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Mudar atributos de um arquivo

Mensagem 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.
lugab
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Mudar atributos de um arquivo

Mensagem 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
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Mudar atributos de um arquivo

Mensagem 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"
lugab
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Mudar atributos de um arquivo

Mensagem 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).
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Mudar atributos de um arquivo

Mensagem 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
lugab
Responder