#include "directry.ch"
#include "set.ch"
PROCEDURE Main
LOCAL acPath, oPath, cSrc1 := "", cSrc2 := ""
cSrc1 += [PROCEDURE Test] + hb_Eol()
cSrc1 += hb_Eol()
cSrc1 += [ oFiles := SchemaFiles()] + hb_Eol()
cSrc1 += [ FOR EACH cFile IN oFiles] + hb_Eol()
cSrc1 += [ hb_MemoWrit( cFile, FileContent( cFile ) )] + hb_Eol()
cSrc1 += [ NEXT] + hb_Eol()
cSrc1 += hb_Eol()
cSrc1 += [ RETURN] + hb_Eol()
cSrc1 += hb_Eol()
cSrc1 += [FUNCTION SchemaFiles()] + hb_Eol()
cSrc1 += hb_Eol()
cSrc2 := [FUNCTION FileContent( cFile )] + hb_Eol()
cSrc2 += hb_Eol()
cSrc2 += [ DO CASE] + hb_Eol()
acPath := Directory( "*.*", "D" )
FOR EACH oPath IN acPath
IF oPath[ F_NAME ] <> "." .AND. oPath[ F_NAME ] <> ".." .AND. oPath[ F_ATTR ] == "D"
GeraPath( oPath[ F_NAME ], @cSrc1, @cSrc2 )
ENDIF
NEXT
cSrc1 += hb_Eol()
cSrc1 += [ RETURN acFiles] + hb_Eol()
cSrc1 += hb_Eol()
cSrc2 += [ ENDCASE] + hb_Eol()
cSrc2 += [ RETURN NIL]
hb_MemoWrit( "x.prg", cSrc1 + cSrc2 )
RETURN
FUNCTION GeraPath( cPath, cSrc1, cSrc2 )
LOCAL aFiles, oFile
aFiles := Directory( cPath + "\*.*" )
FOR EACH oFile IN aFiles
cSrc1 += [ AAdd( acFiles, "] + cPath + "\" + oFile[ F_NAME ] + [" )] + hb_Eol()
cSrc2 += [ CASE cFile == "] + cPath + [\] + oFile[ F_NAME ] + [" ; #pragma __binarystreaminclude "] + cPath + "\" + oFile[ F_NAME ] + [" | RETURN %s] + hb_Eol()
NEXT
RETURN NIL
O fonte acima gera o fonte abaixo.
PROCEDURE Test
oFiles := SchemaFiles()
FOR EACH cFile IN oFiles
hb_MemoWrit( cFile, FileContent( cFile ) )
NEXT
RETURN
FUNCTION SchemaFiles()
AAdd( acFiles, "PL_008i2_CFOP_EXTERNO\consReciNFe_v3.10.xsd" )
AAdd( acFiles, "PL_008i2_CFOP_EXTERNO\consSitNFe_v3.10.xsd" )
AAdd( acFiles, "PL_008i2_CFOP_EXTERNO\consStatServ_v3.10.xsd" )
AAdd( acFiles, "PL_008i2_CFOP_EXTERNO\enviNFe_v3.10.xsd" )
...
RETURN acFiles
FUNCTION FileContent( cFile )
DO CASE
CASE cFile == "PL_008i2_CFOP_EXTERNO\consReciNFe_v3.10.xsd" ; #pragma __binarystreaminclude "PL_008i2_CFOP_EXTERNO\consReciNFe_v3.10.xsd" | RETURN %s
CASE cFile == "PL_008i2_CFOP_EXTERNO\consSitNFe_v3.10.xsd" ; #pragma __binarystreaminclude "PL_008i2_CFOP_EXTERNO\consSitNFe_v3.10.xsd" | RETURN %s
CASE cFile == "PL_008i2_CFOP_EXTERNO\consStatServ_v3.10.xsd" ; #pragma __binarystreaminclude "PL_008i2_CFOP_EXTERNO\consStatServ_v3.10.xsd" | RETURN %s
...
ENDCASE
RETURN NIL
Fazer como text ou outra coisa complica, porque eles usam UTF-8, e perderia formatação.
Mesmo assim, o mais prático é enviar um ZIP, caso tenha validação do lado do cliente.
Um intermediário seria embutir o ZIP no EXE, e descompactar pelo Harbour.