FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Carpeta de temporales
Posts: 149
Joined: Thu Jun 21, 2007 03:26 PM
Carpeta de temporales
Posted: Wed Jul 27, 2011 06:33 PM

Hola. Les transmito una inquietud mas propia de un problema de diseño que de fwh, pero... en una de esas me pueden dar alguna idea. Tengo un ERP modular, que fue creciendo a partir de una base antigua (unos 15 años), paso por DOS, clipper, evoluciono a FW, y Borland, y ahora esta trabajando con FWH perfectamente. En su momento, por facilidad de diseño, y porque no pensamos que se iba a necesitar, todos los indices temporales, bases temporales, etc, se creaban en una ruta determinada c:\tempo (siempre la misma, que debia existir para que el sistema funcione; era un requisito del sistema, que exista una carpeta TEMPO en el disco c:\, con permisos totales para el usuario).
La macana es que ahora que estoy usando en un cliente MS Windows Terminal Server; cuando abro 2 sesiones simultaneas, como el c:\tempo es el mismo para ambas sesiones, el programa, si se usan los mismos modulos, falla. ¿se les ocurre algun truquito para evitar crear una variable por usuario, con un "directorio para temporales", y tener que modificar cientos y cientos de lineas de codigo fuente?
Espero que puedan ayudarme. Gracias desde ya. Atte.

Posts: 1144
Joined: Mon Feb 05, 2007 07:15 PM
Re: Carpeta de temporales
Posted: Wed Jul 27, 2011 08:09 PM
Code (fw): Select all Collapse
cFile      := cTempFile( ".\", ".dbf" )
aDbf := {}
aadd(  aDbf, { 'codigo', 'C', 15, 00 }  )
aadd(  aDbf, { 'nombre', 'C', 45, 00 }  )

dbcreate(  cFile, aDbf )

use cFile new

* you codigo

close

FERASE( cFile )

saludos...
Cesar Cortes Cruz

SysCtrl Software

Mexico



' Sin +- FWH es mejor "
Posts: 257
Joined: Tue May 16, 2006 04:46 PM
Re: Carpeta de temporales
Posted: Thu Jul 28, 2011 06:36 AM

Que tal agregarle al nombre del Directorio la hora en que se crea?

Si lo llamas "DirTmp", agregarle la hora en que se cree:
cFile:="DirTmp"+STRTRAN(TIME(),":","") lo cual te daria algo asi como "DirTmp013524" y dificilmente 2 personas crearan el mismo directorio en el mismo segundo.

Espero te sirva

RodolfoRBG
FWH 1307, xHarbour123 BCC582
rodolfoerbg@gmail.com
Posts: 1283
Joined: Fri Feb 10, 2006 02:34 PM
Re: Carpeta de temporales
Posted: Thu Jul 28, 2011 06:39 AM

Diego,

En este escenario te vas a encontrar 2 situaciones.

1.- Varios usuarios conectados simultaneamente.Cada uno necesita su espacio temporal independientemente del otro. La solucion pasa por declarar i crear tu entorno para cada usuario. Puedes por ejemplo usar Sfn2Lfn(GetEnv( 'USERPROFILE' )) y te dara la carpeta del usuario conectado, pero entiendo que si te conectas remotamente siempre tendras el mismo usuario de la maquina.

2.- Aun asi, si te crearas tu el entorno en funcion del usuario que se conecte a tu aplicacion, en funcion del login, maquina, ..., existe otro problema: Que pasa si el usuario que se conecta lo hace mas de una vez desde la misma maquina ? Si tu aplicacion necesita su espacio temporal por cada sesion, la UNICA solucion pasa por crearte al Inicio de programa una carpeta individual temporal independiente de quien, como, cuando, desde donde, ... Yo me crearia al inicio de la app un nombre aleatorio de una carpeta y justo antes de salir de la aplicacion, se borran ficheros y carpeta.

Salutacions, saludos, regards

"...programar es fácil, hacer programas es difícil..."

UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
HIX -> https://github.com/carles9000/hix
Posts: 1515
Joined: Thu Oct 30, 2008 02:37 PM
Re: Carpeta de temporales
Posted: Thu Jul 28, 2011 07:41 AM
El uso de TS acelera, y mucho, el problema que puede tener una gestion inapropiada de creacion de temporales y que puede producir "choques" con otros usuarios/programa en el nombre del temporal.

Me explico: hay 2 formas de crear el temporal: usando un string "random" o bien basandose en una string que tenga un valor exclusivo (ejem. maquina+ handle del programa).

El problema para UTILIZAR la string "random" tiempo es que todos los usuarios tienen la misma hora, por tanto la hora no es buena estrategia.

A mi modo de ver, la estrategia pasa por utilizar cualquier factor de string, preferentemente random, y crear el temporal justo cuando se obtiene su nombre para asi "reservar" su nombre para que otro usuario no lo utilice.
Posts: 149
Joined: Thu Jun 21, 2007 03:26 PM
Re: Carpeta de temporales
Posted: Thu Jul 28, 2011 12:55 PM

Muchas gracias por las respuestas. Voy a ver que puedo hacer, y despues les cuento. No me va a quedar mas remedio que laburar... Gracias de nuevo...!!!

Posts: 1144
Joined: Mon Feb 05, 2007 07:15 PM
Re: Carpeta de temporales
Posted: Thu Jul 28, 2011 09:51 PM

Bueno el uso de tablas temporales es un verdadero lio,

yo desde hace mucho opte por usar Arrays y todo perfecto.

Saludos..

Cesar Cortes Cruz

SysCtrl Software

Mexico



' Sin +- FWH es mejor "
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: Carpeta de temporales
Posted: Thu Jul 28, 2011 11:28 PM
Amigos:

Mis dos centavos, yo utilizo DBFs temporales nombradas con la hora en que se crean, ejemplo
Code (fw): Select all Collapse
cArchivo := "WW"+SUBSTR(TIME(),1,2)+SUBSTR(TIME(),4,2)+SUBSTR(TIME(),7,2)


Donde WW es el nombre del programa que lo crea, el resto ?, bueno creo que no necesita
explicación.

Hasta ahora no he tenido problemas de choques que aunque no es imposible es muy dificil
que mas de un usuario cree el archivo con el mismo programa a la misma hora, minutos y segundos.

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero

Continue the discussion