Un ejemplo PowerBuilder para trocear rutas y manejar ficheros sin pelearos con la API Win32: separar el nombre, la extensión o la carpeta de una ruta; renombrar y mover ficheros; copiar árboles de directorios enteros; listar ficheros con un patrón... Todo eso que en PB acabas reescribiendo a mano, aquí lo resuelve .NET de serie, que ya lo trae robusto y bien probado.
¿Y cómo lo hace? PowerBuilder se apoya en .NET: cargamos una pequeña librería .NET (FileService,
que por debajo usa System.IO.Path, System.IO.File y System.IO.Directory) como
dotnetobject con el .NET DLL Importer de PB. Eso nos genera un objeto proxy,
nvo_fileservice, que desde PowerScript se usa como si fuera nativo:
nvo_fileservice lnv_fs
lnv_fs = create nvo_fileservice
string ls_nombre, ls_ext, ls_carpeta
ls_nombre = lnv_fs.of_getfilename("C:\datos\informe.pdf") // informe.pdf
ls_ext = lnv_fs.of_getextension("C:\datos\informe.pdf") // .pdf
ls_carpeta = lnv_fs.of_getdirectoryname("C:\datos\informe.pdf") // C:\datos
Lo que tenéis disponible en el proxy:
- Trocear rutas →
of_getfilename,of_getextension,of_getfilenamewithoutextension,of_getdirectoryname,of_changeextension,of_endsindirectoryseparator. - Operar con ficheros →
of_filerename(renombra/mueve, sobrescribiendo si hace falta). - Operar con carpetas →
of_copydirectory(copia un árbol completo, con filtro*.extopcional y recursividad) yof_getdirectoryfiles(lista los ficheros devolviendo rutas relativas, comodísimo para recorrer en PB).
Por dentro la librería lleva un patrón GetLastError y, además, lanza excepciones, así que
podéis envolver las llamadas en un TRY...CATCH de PowerBuilder y enteraros de cualquier fallo.
El "motor" que hace el trabajo es la librería .NET FileService (clase FileService):
- Se despliega ya compilada en la carpeta
DotNet\FileService\de este propio ejemplo, para que clones, compiles y funcione sin más. - Se consume desde PowerBuilder como
dotnetobject(el proxynvo_fileservice). - El código fuente vive en
Blog\Net10\FileService(antes estaba enNet8) y se recompila/despliega con el scriptdesplegar_dotnet.bat(hacedotnet publishy espeja las DLLs a la carpetaDotNetde cada ejemplo). - Repo del proyecto .NET (Visual Studio 2022): https://github.com/rasanfe/FileService
- PowerBuilder 2025 para abrir y compilar la solución.
- .NET 10 Runtime instalado en la máquina → https://dotnet.microsoft.com/en-us/download/dotnet/10.0
- La carpeta
DotNet\FileService\con las DLLs desplegadas (ya viene en el repo).
- Clona el repo y abre
pbfileservice.pbslncon PowerBuilder 2025. - Compila (Full Build) y ejecuta.
- Prueba a pasarle rutas y ver cómo extrae nombre, extensión y carpeta.
- Lanza una copia de directorio o un listado de ficheros y observa los resultados.
🎬 Vídeo demo en YouTube: https://youtu.be/theQ713zQ5s
https://github.com/rasanfe/pbfileservice
¡Nos vemos en el próximo artículo! Y recuerda: en PowerBuilder, los límites solo están en nuestra imaginación. 🚀
📨 Blog: https://rsrsystem.blogspot.com/