Página 1 de 2
erro na função file()
Enviado: 11 Ago 2014 01:03
por cjp
Estou tendo problemas com a função file().
A ideia é verificar se uma base de dados existe. Sempre funcionou, mas agora não está funcionando.
Está retornando .t., mesmo quando o arquivo não existe.
Já tentei de duas formas:
ou
Das duas formas, está indicando que o arquivo existe, mesmo quando ele não existe.
Alguém saberia dizer por que?
erro na função file()
Enviado: 11 Ago 2014 09:16
por Itamar M. Lins Jr.
Verifique o PATH antes p/ ver onde o seu sistema está!
? curdir()
Ou use o PATH completo, file("c:\xyz\abdc\xxx.dbf")
Saudações,
Itamar M. Lins Jr.
erro na função file()
Enviado: 11 Ago 2014 09:21
por Jairo Maia
Inácio,
Assim:
if !file("mail1.dbf") ou assim,
if file("mail1.dbf")=.f. irá retornar .T. quando o arquivo não existir. É o que você está pedindo ao sistema. Veja:
Código: Selecionar todos
if !file("mail1.dbf") // se arquivo não existir...
Hb_Alert( "Arquivo inexistente!" )
EndIf
ou idem aqui:
Código: Selecionar todos
if file("mail1.dbf")=.f. // se arquivo não existir...
Hb_Alert( "Arquivo inexistente!" )
EndIf
erro na função file()
Enviado: 15 Ago 2014 20:48
por cjp
Itamar, eu já havia testado, a pasta está correta.
Jairo, talvez eu não tenha me expressado direito, mas, quando eu disse que está retornando .t., não é da forma como vc disse. Meu código está assim:
Código: Selecionar todos
if !file("mail1.dbf")
dbcreate("mail1",nvestr)
usebase("mail1")
endif
A ideia é que se o arquivo mail1.dbf não existir, ele o criaria. Ocorre que, mesmo que o arquivo não exista, ele não está entrando no if, ou seja, não está criando. Me entende?
erro na função file()
Enviado: 16 Ago 2014 10:39
por Jairo Maia
Muito estranho! Coloquei alguns dados na nvestr e testei seu bloco, não deu nada errado. Muito estranho isso...
erro na função file()
Enviado: 16 Ago 2014 11:26
por JoséQuintas
Vamos ver se é o mesmo problema que tive, mas que é o contrário: mostrar que não existe, mesmo existindo
Explicação:
O Windows pra ganhar velocidade não consulta o servidor toda hora.
Acabou de criar, ele diz que não existe, porque não consultou o servidor novamente após a criação.
O mesmo acontece nas outras estações, não enxergando este arquivo criado em outro terminal.
Fazer o que... faz parte do default atual do Windows.
Solução:
Configurar a rede Windows.
O Harbour tem uma função que faz isso, seria o mais prático.
erro na função file()
Enviado: 16 Ago 2014 11:34
por cjp
Mas estou usando a função local, não é em rede.
Tem função no Harbour equivalente à file()? Qual?
erro na função file()
Enviado: 16 Ago 2014 11:56
por Jairo Maia
Olá Inácio,
Não, porquê por ser uma função de baixo nível, tem que funcionar perfeitamente "sem embargos". Por via de dúvidas você poderia testar assim:
Código: Selecionar todos
nArquivos:=Directory( "mail1.dbf" )
if nArquivos = 0
dbcreate("mail1",nvestr)
usebase("mail1")
endif
Mas é gambiarra, não é pra dar errado a função File(). Responda o seguinte:
Você não está em algum ponto de seu sistema usando a constante
SET PATH TO <cPastaPadrao> ou
SET DEFAULT TO <cPastaPadrão> ou ainda a função
Set( _SET_PATH, <(pth)> ) ou a função
Set( _SET_DEFAULT, <(path)> ), e não restaurando o Default?
Qualquer uma dessas coisas acima se estiver sendo usada, e na função File() o path for omintido, o Default é assumido, mesmo você checando que está na pasta certa do arquivo.
erro na função file()
Enviado: 16 Ago 2014 12:17
por cjp
Eu não uso set path nem set default, nunca.
Vou testar do jeito que vc falou e depois eu posto.
erro na função file()
Enviado: 16 Ago 2014 12:19
por Itamar M. Lins Jr.
Isso é porque vc usa drive "mapeado" ?
Use como eu escrevi. O caminho completo file("c:\meudir\meuarq.dbf").
Porque vc "pode" está chamando o seu executável de outra pasta c:\meuexec\xyz.exe, ele não vai enxergar os arquivos mesmo.
Use os novos comandos do harbour.
hb_DirBase()
hb_FileExists()
hb_PathNormalize()
...
Checar aquivos via MAPEAMENTO é fria. (abrir/gravar/criar) use o letodb, ou estude as novas funções que existem no harbour que trabalham via sockets.
Código: Selecionar todos
+ added PRG interface to Harbour FILE IO API
The following PRG functions are available for Harbour programmers:
HB_VFEXISTS( <cFileName>, [ @<cDestFileName> ] ) -> <lOK>
HB_VFERASE( <cFileName> ) -> <nResult>
HB_VFRENAME( <cFileSrc>, <cFileDst> ) -> <nResult>
HB_VFCOPYFILE( <cFileSrc>, <cFileDst> ) -> <nResult>
HB_VFDIREXISTS( <cDirName> ) -> <lExists>
HB_VFDIRMAKE( <cDirName> ) -> <nSuccess>
HB_VFDIRREMOVE( <cDirName> ) -> <nSuccess>
HB_VFDIRECTORY( [ <cDirSpec> ], [ <cAttr> ] ) -> <aDirectory>
HB_VFDIRSPACE( <cDirName>, [ <nInfoType> ] ) -> <nFreeSpace>
HB_VFATTRGET( <cFileName>, @<nAttr> ) -> <lOK>
HB_VFATTRSET( <cFileName>, <nAttr> ) -> <lOK>
HB_VFTIMEGET( <cFileName>, @<tsDateTime> ) -> <lOK>
HB_VFTIMESET( <cFileName>, <tsDateTime> ) -> <lOK>
HB_VFLINK( <cExistingFileName>, <cNewFileName> ) -> <nSuccess>
HB_VFLINKSYM( <cTargetFileName>, <cNewFileName> ) -> <nSuccess>
HB_VFLINKREAD( <cFileName> ) -> <cDestFileName> | ""
HB_VFOPEN( <cFileName>, [ <nMode> ], [ <nAttr> ] ) -> <pHandle> | NIL
HB_VFCLOSE( <pHandle> ) -> <lOK>
HB_VFLOCK( <pHandle>, <nStart>, <nLen>, [ <nType> ] ) -> <lOK>
HB_VFUNLOCK( <pHandle>, <nStart>, <nLen> ) -> <lOK>
HB_VFLOCKTEST( <pHandle>, <nStart>, <nLen>, [ <nType> ] ) ;
-> <nPID> | 0 (nolock) | -1 (err)
HB_VFREAD( <pHandle>, @<cBuff>, [ <nToRead> ], [ <nTimeOut> ] ) ;
-> <nRead>
HB_VFWRITE( <pHandle>, <cBuff>, [ <nToWrite> ], [ <nTimeOut> ] ) ;
-> <nWritten>
HB_VFREADAT( <pHandle>, @<cBuff>, [ <nToRead> ], [ <nAtOffset> ] ) ;
-> <nRead>
HB_VFWRITEAT( <pHandle>, <cBuff>, [ <nToWrite> ], [ <nAtOffset> ] ) ;
-> <nWritten>
HB_VFSEEK( <pHandle>, <nOffset>, [ <nWhence> ] ) -> <nOffset>
HB_VFTRUNC( <pHandle>, [ <nAtOffset> ] ) -> <lOK>
HB_VFSIZE( <pHandle> ) -> <nSize>
HB_VFEOF( <pHandle> ) -> <lEOF>
HB_VFFLUSH( <pHandle>, [ <lDirtyOnly> ] ) -> NIL
HB_VFCOMMIT( <pHandle> ) -> NIL
HB_VFCONFIG( <pHandle>, <nSet>, [ <nParam> ] ) -> <nResult>
HB_VFHANDLE( <pHandle> ) -> <nOsHandle>
HB_VFTEMPFILE( @<cFileName>, [ <cDir> ], [ <cPrefix> ], [ <cExt> ], ;
[ <nAttr> ] ) -> <pHandle> | NIL
Please remember that not all redirectors have to support all of them.
I.e. MEMIO allows to use directory names in files but does not allow to
create or remove directories. It also does not support file attributes
and times in current implementation though it can be easy added.
HB_VFCONFIG() is general function which can be used by redirector
authors to make some special operations which are specific to given
device.
HB_VFTEMPFILE() always creates temporary files on local system without
switching to FILE IO redirector. It's intentional behavior.
* src/rtl/fscopy.c
* used Harbour FILE IO API in hb_fsCopy()/HB_FCOPY()
Please remember that HB_FCOPY() always makes operation using current
system when HB_VFCOPY() may optimize it moving the operation to low
level subsystem or even other computer i.e. NETIO can do that when
both files are located on the same server.
* src/rdd/delim1.c
* src/rdd/sdf1.c
* src/rdd/dbf1.c
* src/rdd/dbfcdx/dbfcdx1.c
* src/rdd/dbffpt/dbffpt1.c
* src/rdd/dbfnsx/dbfnsx1.c
* src/rdd/dbfntx/dbfntx1.c
* src/rdd/hsx/hsx.c
* open files with FXO_NOSEEKPOS attribute to inform low level API that
read/write filepos is not used (disables unnecessary filepos emulation).
* contrib/hbnetio/netio.h
* contrib/hbnetio/netiocli.c
* contrib/hbnetio/netiosrv.c
+ added support for extended Harbour FILE IO API.
* contrib/hbnetio/utils/hbnetio/netiomgm.hb
! renamed "quit" command to "shutdown" as suggested by Rolf.
* contrib/hbnetio/utils/hbnetio/hbnetio.prg
* allow to interrupt server process using ESC when run in console window.
* contrib/hbmemio/memio.c
+ added support for extended Harbour FILE IO API.
I left two minor TODO notes - maybe someone will try to implement it.
Saudações,
Itamar M. Lins Jr.
erro na função file()
Enviado: 16 Ago 2014 12:30
por cjp
Na verdade não estou usando drive mapeado não. Essa função está verificando no disco local mesmo. Vou testar com a hb_FileExists(). Obrigado.
erro na função file()
Enviado: 16 Ago 2014 23:50
por alxsts
Olá!
DIRECTORY()
Create an array of directory and file information
------------------------------------------------------------------------------
Syntax
DIRECTORY(<cDirSpec>, [<cAttributes>]) --> aDirectory
Jairo, permita-me um aparte: a função Directory() retorna um array. Precisaria fazer uma pequena alteração no teu código:
Código: Selecionar todos
1 nArquivos := Len( Directory( "mail1.dbf" ) )
2 if nArquivos = 0
3 dbcreate("mail1",nvestr)
4 usebase("mail1")
5 endif
Quanto ao assunto do tópico, não parei para testar mas, nunca tive e nunca ouvi falar de problemas com esta função, a não ser o exposto acima pelo Quintas...
erro na função file()
Enviado: 17 Ago 2014 02:59
por Jairo Maia
Valeu Alexandre. Tem razão. Obrigado.
erro na função file()
Enviado: 23 Nov 2018 18:04
por Emanuel
ola galera...
boa tarde a todos
Eu estou com uma duvida aqui ja faz um bom tempo que tento solucionar, mas acho que não da muito certo do jeito que eu quero nn...
Código: Selecionar todos
select novo
cTabs := C_TABELA
cTabs := STUFF(cTabs, len(alltrim(cTabs)) +1,0, ".dbf")
cRoad := "/sist/projetos/pasta1/copy/"
If File(cRoad+cTabs)
? "tabela existente!", cTabs
Else
? "tabela nao existe!", cTabs
EndIf
O objetivo era saber se os dbf's que salvei no campo C_TABELA são iguais aos que existem no caminho que especifiquei no cRoad. eu tentei usar a função file(), mas não deu muito certo. Parece que isso que eu faço com as variaveis dentro da função não funciona.
Porem se eu fizer assim:
assim funciona perfeitamente...
obs...
É a primeira vez que tento usar essa função...
att...
erro na função file()
Enviado: 23 Nov 2018 18:33
por Emanuel
opa!!!
kkkk
depois de muito sofrimento, achei o problema
Código: Selecionar todos
cTabs := STUFF(cTabs, len(alltrim(cTabs)) +1 , 0, ".dbf")
cRoad := "/sist/projetos/pasta1/copy/"
cTabs := alltrim(cTabs)
depois do .dbf existia espaços, ai usei o ALLTRIM() e pronto kkk, problema resolvido...
vlw galera -:]
até a proxima duvida rsrsrs