hb_vfOpen() não cria arquivo em compartilhamento Linux
Moderador: Moderadores
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
hb_vfCreate() pasta linux
Tá... errei no texto ao colocar o nome, não existe hb_vfCreate()
Pensando bem... se não me engano também tinha dado problema no uso exclusivo do Windows com hb_vfClose()
Se eu tiver tempo eu confirmo isso.
Pensando bem... se não me engano também tinha dado problema no uso exclusivo do Windows com hb_vfClose()
Se eu tiver tempo eu confirmo isso.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
hb_vfCreate() pasta linux
Realmente foi bom você insistir tanto....
O problema é maior do que eu coloquei:
hb_vfClose() deu problema com Windows Server sozinho
hb_vfOpen(), pra criar arquivo, deu problema com Windows Server + Linux
Suas explicações poderiam valer pra segunda situação, se não tivesse dado problema na primeira.
Mas não tenho certeza se foi só Windows Server sozinho, ou se também no Windows 10 sozinho.
Isso eu já não vou testar, porque tenho mais o que fazer.
Uso Harbour 3.4, e ninguém vai mexer nele mesmo... então tanto faz.
O problema é maior do que eu coloquei:
hb_vfClose() deu problema com Windows Server sozinho
hb_vfOpen(), pra criar arquivo, deu problema com Windows Server + Linux
Suas explicações poderiam valer pra segunda situação, se não tivesse dado problema na primeira.
Mas não tenho certeza se foi só Windows Server sozinho, ou se também no Windows 10 sozinho.
Isso eu já não vou testar, porque tenho mais o que fazer.
Uso Harbour 3.4, e ninguém vai mexer nele mesmo... então tanto faz.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
hb_vfCreate() pasta linux
Olá!
Uso isso ai em uma rotina que abre e fecha pelo menos MIL NFCe por dia, isso só em 1 cliente.
Saudações,
Itamar M. Lins Jr.
É fake, pra todo lado !Suas explicações poderiam valer pra segunda situação, se não tivesse dado problema na primeira.
Uso isso ai em uma rotina que abre e fecha pelo menos MIL NFCe por dia, isso só em 1 cliente.
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
hb_vfCreate() pasta linux
Podemos concluir então, que se funciona com você, qualquer problema em outro lugar é mentira.Itamar M. Lins Jr. escreveu:É fake, pra todo lado !
Uso isso ai em uma rotina que abre e fecha pelo menos MIL NFCe por dia, isso só em 1 cliente.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
hb_vfCreate() pasta linux
Olá!
E vc é deus todo poderoso que quer condenar o que não sabe não entende.
hbmk2.prg tem algumas, com somente READ e com WRITE ativado, em alguns pontos do PRG.
Quem usa PE mesmo ele abre pra gravar.(senha ?)
Saudações,
Itamar M. Lins Jr.
Se vc se desse pelo menos o trabalho de ler. Não falaria uma bobagem dessa.Podemos concluir então, que se funciona com você, qualquer problema em outro lugar é mentira.
Esse código está no hbmk2.exe então todos que usam no mundo usam de pirraça pq não funciona. Nem no Linux/Windows/MacOS...O hbmk2 usa essas ai que postei em todos os OS que roda o Harbour.
E vc é deus todo poderoso que quer condenar o que não sabe não entende.
Código: Selecionar todos
IF hbmk[ _HBMK_lINC ]
IF hbmk[ _HBMK_lREBUILD ] .OR. ! hb_MemoRead( l_cCSTUB ) == cFile
hFile := hb_vfOpen( l_cCSTUB, FO_CREAT + FO_TRUNC + FO_WRITE )
ELSE
hFile := ""
ENDIF
ELSE
hFile := hb_vfTempFile( @l_cCSTUB,, "hbmk_", ".c" )
ENDIF
IF HB_ISSTRING( hFile )
AAdd( hbmk[ _HBMK_aC ], l_cCSTUB )
ELSEIF hFile != NIL
hb_vfWrite( hFile, cFile )
hb_vfClose( hFile )
Quem usa PE mesmo ele abre pra gravar.(senha ?)
Código: Selecionar todos
IF ( hFile := hb_vfOpen( cFileName, FO_READWRITE + FO_EXCLUSIVE ) ) != NIL
IF ( cSignature := hb_vfReadLen( hFile, 2 ) ) == "MZ"
hb_vfSeek( hFile, 0x003C, FS_SET )
nPEPos := ;
Bin2W( hb_vfReadLen( hFile, 2 ) ) + ;
Bin2W( hb_vfReadLen( hFile, 2 ) ) * 0x10000
hb_vfSeek( hFile, nPEPos, FS_SET )
IF ! hb_vfReadLen( hFile, 4 ) == "PE" + hb_BChar( 0 ) + hb_BChar( 0 )
nPEPos := NIL
ENDIF
ELSEIF cSignature + hb_vfReadLen( hFile, 2 ) == "PE" + hb_BChar( 0 ) + hb_BChar( 0 )
nPEPos := 0
ENDIF
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
hb_vfOpen() não cria arquivo em compartilhamento Linux
Agora entendo porque muita gente usa XHarbour.
É pra se livrar do Itamar kkkk
É pra se livrar do Itamar kkkk
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
hb_vfOpen() não cria arquivo em compartilhamento Linux
Olá!
Ressuscitando esse tópico, para informar.
Resumindo tem que usar hb_vfopen() com os atributos corretos -> FO_CREAT + FO_TRUNC + FO_WRITE
PS. ATENÇÃO!!!! O teste foi feito no WINDOWS 10!
Saudações,
Itamar M. Lins Jr.
Ressuscitando esse tópico, para informar.
Código: Selecionar todos
#include "fileio.ch"
//Maneira correta!
cArq := "arquivo.txt"
cTexto := "ALO MUNDO"
pFH := hb_vfopen( cArq, FO_CREAT + FO_TRUNC + FO_WRITE )
hb_vfWrite(pFH, cTexto)
hb_vfClose(pFH)
//Maneira que deu erro.
cArq := "arquivo.txt"
cTexto := "ALO MUNDO"
pFH := hb_vfopen( cArq )
hb_vfWrite(pFH, cTexto) //->Aqui deu erro
hb_vfClose(pFH)
//OUTRA Maneira que deu erro.
cArq := "arquivo.txt"
cTexto := "ALO MUNDO"
pFH := hb_FCreate( cArq )
hb_vfWrite(pFH, cTexto) //->Aqui deu erro
hb_vfClose(pFH)
//Mais OUTRA Maneira que deu erro.
cArq := "arquivo.txt"
cTexto := "ALO MUNDO"
pFH := FCreate( cArq )
hb_vfWrite(pFH, cTexto) //->Aqui deu erro
hb_vfClose(pFH)
PS. ATENÇÃO!!!! O teste foi feito no WINDOWS 10!
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
hb_vfOpen() não cria arquivo em compartilhamento Linux
Pode até ser assim, mas não concordo com esse uso.Itamar M. Lins Jr. escreveu:pFH := hb_vfopen( cArq, FO_CREAT + FO_TRUNC + FO_WRITE )
Coisa elementar:
Acredito que FO_TRUNC seja de TRUNCATE, pra cortar o restante do arquivo, mas se é novo, não há o que cortar.
Seus testes só tem com e sem parâmetros, não tem com parâmetros parciais.
Também dá pra considerar que, se está criando, só pode ser pra gravar, apesar que poderia ser um arquivo somente leitura, mas mesmo assim seria pra gravar vazio ou não.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
hb_vfOpen() não cria arquivo em compartilhamento Linux
Situação interessante essa.JoséQuintas escreveu:apesar que poderia ser um arquivo somente leitura, mas mesmo assim seria pra gravar vazio ou não.
Um arquivo somente leitura só pode ser lido.
Será que o "criador" desse arquivo consegue criar gravando? ou será que mesmo pra ele fica impedido de gravar?
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
hb_vfOpen() não cria arquivo em compartilhamento Linux
Olá!
Truncar, neste caso penso eu, que se o arquivo(string) for muito GRANDE, ele vai gravar o que puder. Pode ser cArq:="c:\filmes\meu_filme_de_2T.mp4" ai ele gravará o que aguentar no "buffers?" limite do "OS ?"
O resto eu nem vou comentar.
Basta quem desejar fazer os testes, e melhorar ai as informações.
Eu fiz alguns testes, mas pode ser corrigido e/ou melhorado, com mais testes com LINHAS DE CÓDIGOS que é o quê nos interessa.
Ficar discutindo sem rumo e sem propósito é que não dá.
Saudações,
Itamar M. Lins Jr.
Sacode a poeira ai...seja de TRUNCATE, pra cortar o restante do arquivo, mas se é novo, não há o que cortar.
Truncar, neste caso penso eu, que se o arquivo(string) for muito GRANDE, ele vai gravar o que puder. Pode ser cArq:="c:\filmes\meu_filme_de_2T.mp4" ai ele gravará o que aguentar no "buffers?" limite do "OS ?"
O resto eu nem vou comentar.
Basta quem desejar fazer os testes, e melhorar ai as informações.
Eu fiz alguns testes, mas pode ser corrigido e/ou melhorado, com mais testes com LINHAS DE CÓDIGOS que é o quê nos interessa.
Ficar discutindo sem rumo e sem propósito é que não dá.
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
hb_vfOpen() não cria arquivo em compartilhamento Linux
Como eu disse, corta o que existe antes.
FO_CREAT deixou de ser exclusivo pra criação, pode ser pra alteração.
Vixe... open pra create... create pra edit... o trem endoidou... e eu que tava errado kkkk
FO_CREAT deixou de ser exclusivo pra criação, pode ser pra alteração.
Vixe... open pra create... create pra edit... o trem endoidou... e eu que tava errado kkkk
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
hb_vfOpen() não cria arquivo em compartilhamento Linux
Olá!
A diferença é essa mesmo.
Enquanto desejo saber mais, como funciona as funções, e se tem bugs... Fica essa coisa sem sentido, que só atrapalha.
Se não pode ajudar, melhor não atrapalhar.
Bom provavelmente FO_TRUNC seja para cortar um arquivo e não da forma que pensei. Mas seria bom um exemplo.
Saudações,
Itamar M. Lins Jr.
A diferença é essa mesmo.
Enquanto desejo saber mais, como funciona as funções, e se tem bugs... Fica essa coisa sem sentido, que só atrapalha.
Se não pode ajudar, melhor não atrapalhar.
Bom provavelmente FO_TRUNC seja para cortar um arquivo e não da forma que pensei. Mas seria bom um exemplo.
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
hb_vfOpen() não cria arquivo em compartilhamento Linux
Pra mim ficou claro, e esse já seria um exemplo.
O log de erros, compatível com XHarbour, pode ser adicionado ao anterior (append) ou somente o último erro.
Igual
SET ALTERNATE TO file
SET ALTERNATE TO file ADDITIVE
Foi a isso que me referi antes.
TRUNCATE seria pra quando o arquivo já existe, pra apagar o conteúdo anterior.
Comparando ao DBF, seria igual ao ZAP antes do APPEND.
Comparando ao SQL, seria igual ao TRUNCATE TABLE xxxx, antes do INSERT.
Mas.... não considero isso CREATE.
O log de erros, compatível com XHarbour, pode ser adicionado ao anterior (append) ou somente o último erro.
Igual
SET ALTERNATE TO file
SET ALTERNATE TO file ADDITIVE
Foi a isso que me referi antes.
TRUNCATE seria pra quando o arquivo já existe, pra apagar o conteúdo anterior.
Comparando ao DBF, seria igual ao ZAP antes do APPEND.
Comparando ao SQL, seria igual ao TRUNCATE TABLE xxxx, antes do INSERT.
Mas.... não considero isso CREATE.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
hb_vfOpen() não cria arquivo em compartilhamento Linux
Olá!
Acredito que neste post do Przemek, pode esclarecer mais um pouco pq temos a função hb_vfopen()
https://terminalroot.com.br/2014/12/lin ... fopen.html
fopen() já tem na linguagem C e é pelo atributos que cria e ou abre.
Itamar M. Lins Jr.
Acredito que neste post do Przemek, pode esclarecer mais um pouco pq temos a função hb_vfopen()
Código: Selecionar todos
Hi,
You are wrong and dummy files after crash do not create any problems.
This is quite good method but you have to bound it with locks.
In DOS based operating systems (DOS, Windows, OS2) you can use
file file deny flags flags for it, i.e.:
#innclude "fileio.ch"
#define LOCK_FILE := "c:\temp\myapp.lck"
function set_exclusive_lock()
return hb_FCreate( LOCK_FILE, FC_NORMAL, FO_EXCLUSIVE ) != F_ERROR
and then you can add to your main funciton:
if !set_exclusive_lock()
alert( "Program already active.;Terminating this next instance." )
endif
For POSIX systems you can use FOpen() with FO_CREAT flag and then
hb_FLock() to lock some region, i.e. 1-st byte. Such method is portable
and should work with all OS-es supporting file range locks, i.e.:
function set_exclusive_lock()
local hFile := FOpen( LOCK_FILE, FO_READWRITE + FO_EXCLUSIVE + FO_CREAT )
return hFile != F_ERROR .and. hb_FLock( hFile, 0, 1 )
Of course the LOCK_FILE has to be different for systems without
drive letters.
In both cases when process is terminated OS release locks so there is
no chance for dummy locks.
best regards,
Przemek
fopen() já tem na linguagem C e é pelo atributos que cria e ou abre.
Saudações,/* Esta é a função de abertura de arquivos. Com modo 'w'(Abrir um arquivo texto para gravação. Se o arquivo não existir, ele será criado.
Se já existir, o conteúdo anterior será destruído.) */
pFile = fopen(arquivo , "w");
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.