Power Builder - API's windows para lectura escritura archivos

 
Vista:

API's windows para lectura escritura archivos

Publicado por miguel (153 intervenciones) el 30/08/2009 05:09:09
Hola, por si os viene bien a alguién: powerbuilder es lenta en operaciónes de cadena.

Si estaís escribiendo / leyendo archivos a disco en bloques de 32kb. (lento si son un poco más grandes). hay solución.

------------------------------- leer un archivo a blob ( habrá que adaptar el código) ---------------
// desde powerbuilder script

// of_readfile llama a FileRead api de windows
nvo_blob luo_blob
blob lblob_mi_blob
string ls_archivo

ls_archivo = 'C:algun_archivo_en_mi_disco_duro' // importante tiene que ser en local no en red.

luo_blob = create nvo_blob

setpointer(hourglass!)
if not luo_blob.of_readfile(ls_archivo, blb_blob_mi_blob) then
// error de lectura
destroy luo_blob
return -1
end if

// todo ha ido bien si hemos llegado hasta aquí
// hacer lo que haga falta con el archivo ubicado en lblob_mi_blob
.......
.......

destroy luo_blob
return 0
// para

--------------------------------------------- escribir un blob a archivo en disco local ---------------------

integer li_cont, i, n, li_fn, li_dif
blob lblb_nulo
nvo_blob luo_blob
string ls_filename_copy, ls_fname, ls_fext, ls_path, ls_org_sin_path
string ls_lista_arch[], ls_msg[]
datetime ldt_fechas_arch[], ldt_ahora

luo_blob = create nvo_blob // contiene funciones para tratamiento blob

ls_filename = "c:archivo_en_disco_duro_local" // debe ser local para archivos grandes

// of_writefile llama a FileWrite api de windows
setpointer(hourglass!)
if not luo_blob.of_writeFile(ls_filename, ablb_blob) then
ablb_blob = lblb_nulo
// error de escritura
//ls_msg[1] = as_filename
//gnv_app.inv_error.of_message('569', ls_msg)
destroy luo_blob
return -2
end if

destroy luo_blob; destroy luo_kernell
return 0


--------------------------------------------------------------------------------------------------
os adjunto el código del objeto nvo_blob: ( no cabe de golpe o sea que teneís que copiarlo primero a un archivo y luego copiar el siguiente correo también para que todo esté dentro de nvo_blob.sru, o me lo podeís solicitar via: [email protected])
el objeto usa otro nvo_kernell32, que postearé inmediatemente después de este mensaje
-- salvar el siguiente texto que hay debajo de ---------, (como nvo_blob.sru en disco duro) e importarlo en powerbuilder hacia una librería. (primero tienes que tener haber hecho lo mismo con el objeto nvo_kernell32 que está en los siguiente mensajes....
-------------------------------------------------------- parte 1 de 2
$PBExportHeader$nvo_blob.sru
$PBExportComments$objeto para leer escribir blobs desde hacia archivo,
forward
global type nvo_blob from nonvisualobject
end type
end forward

type uuid from structure
unsignedlong data1
integer data2
integer data3
blob data4
end type

global type nvo_blob from nonvisualobject
end type
global nvo_blob nvo_blob

type prototypes
//--------------- últ. parám. de MoveFileExA:
// MOVEFILE_REPLACE_EXISTING 0x00000001
// MOVEFILE_COPY_ALLOWED 0x00000002 (para mover hacia otro volumen/disco)
// MOVEFILE_DELAY_UNTIL_REBOOT 0x00000004
// MOVEFILE_WRITE_THROUGH 0x00000008
Function boolean MoveFileExA( &
ref string cfrom, &
ref string cto, &
ref long flag) LIBRARY "Kernel32.dll"

Function ulong GetModuleFileName (ulong hinstModule, ref string lpszPath, ulong cchPath ) Library "KERNEL32.DLL" Alias for "GetModuleFileNameA"
FUNCTION ulong GetTempPath (long nBufferLength, &
ref string lpBuffer ) LIBRARY "KERNEL32.DLL" Alias for "GetTempPathA"

Function uint GetWindowsDirectoryA( &
ref string dirtext, uint textlen) &
library "KERNEL32.DLL"

Function ulong CreateFile ( &
string lpFileName, &
ulong dwDesiredAccess, &
ulong dwShareMode, &
ulong lpSecurityAttributes, &
ulong dwCreationDisposition, &
ulong dwFlagsAndAttributes, &
ulong hTemplateFile &
) Library "kernel32.dll" Alias For "CreateFileA"

Function boolean CloseHandle ( &
ulong hObject &
) Library "kernel32.dll"

Function boolean WriteFile ( &
ulong hFile, &
Ref blob lpBuffer, &
ulong nNumberOfBytesToRead, &
Ref ulong lpNumberOfBytesRead, &
ulong lpOverlapped &
) Library "kernel32.dll"

Function boolean ReadFile ( &
ulong hFile, &
Ref blob lpBuffer, &
ulong nNumberOfBytesToRead, &
Ref ulong lpNumberOfBytesRead, &
ulong lpOverlapped &
) Library "kernel32.dll"

Function long UuidCreate ( &
Ref UUID pId &
) Library "rpcrt4.dll"

Function long UuidToString ( &
Ref UUID Uuid, &
Ref ulong StringUuid &
) Library "rpcrt4.dll" Alias For "UuidToStringA"

Function long RpcStringFree ( &
Ref ulong pString &
) Library "rpcrt4.dll" Alias For "RpcStringFreeA"

Subroutine CopyMemory ( &
Ref string Destination, &
ulong Source, &
long Length &
) Library "kernel32.dll" Alias For "RtlMoveMemory"

Function long FindMimeFromData ( &
ulong pBC, &
blob pwzUrl, &
blob pBuffer, &
ulong cbSize, &
ulong pwzMimeProposed, &
ulong dwMimeFlags, &
ref ulong ppwzMimeOut, &
ulong dwReserved &
) Library "urlmon.dll"

Function long SendStringMessage ( &
long lhWnd, &
uint Msg, &
Ref string wParam, &
long lParam &
) Library "user32.dll" Alias For "SendMessageA"


//function boolean SetFileAttributes( ref string lpFileName, ulong dwFileAttributes ) Library "user32.dll"
end prototypes

type variables
Private:

Constant String CRLF = Char(13) + Char(10)

Boolean ib_html
Boolean ib_receipt
Boolean ib_authenticate

Integer ii_port = 25

String is_userid
String is_passwd
String is_server
String is_subject
String is_body
String is_FromEmail
String is_FromName
String is_ToEmail[]
String is_ToName[]
String is_CcEmail[]
String is_CcName[]
String is_BccEmail[]
String is_BccName[]
String is_AttachFile[]

Uint iui_socket

end variables

forward prototypes
public function boolean of_readfile (string as_filename, ref blob ablob_data)
public function boolean of_writefile (string as_filename, ref blob ablob_data)
public function string of_getappdir ()
public function string of_getwintempdir ()
public function boolean of_movefile (string as_origen, string as_destino)
end prototypes
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:API's windows para lectura escritura archivos

Publicado por miguel2 (108 intervenciones) el 31/08/2009 10:49:55
No sé porqué, pero no consiguía adjuntar el resto del código (creo que tenía virus en mi ordenador). Si a alguién le interessa: mándame un e-mail y os mando los dos objetos en una pbl por correo.

miguel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:API's windows para lectura escritura archivos

Publicado por miguel3 (108 intervenciones) el 31/08/2009 10:53:45
mi correo es mjlreina38 hotmail.com o miguelleeuwe terra.es
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar