Newsgroup: it.comp.os.os2
Titolo: Problema con RENAME e BackAgain

Uso BackAgain per fare un backup quotidiano. Al termine del backup gli
faccio lanciare questo miniscript (c'e' un'apposita funzione "User 
Exit"):
if RxFuncQuery('SysLoadFuncs') then do
  call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs'
  call SysLoadFuncs
end
'R:'
DEL 'Giornaliero_' || translate(date('W')) || '.DAT'
call SysSleep 60
RENAME 'Giornaliero.DAT' 'Giornaliero_' || translate(date('W')) || 
'.DAT'
Qualcuno ha idea del perche' il maledetto mi si blocca sempre con:
[R:\]RENAME Giornaliero.DAT Giornaliero_WEDNESDAY.DAT
SYS0032: The process cannot access the file because it is being used
by another process.
Non e' BackAgain che blocca il rename: ho fatto delle prove spegnendo 
sia lui che lo scheduler mentre lo script contava fino a 60, ben prima
quindi che arrivasse al comando RENAME...
-- 
ciao, Gabriele
[ 
http://www.quasarbbs.net/xwp
 ]
[ 
http://www.quasarbbs.net/ecsoft2/
 ]

 by another process.
Mi è successo un sacco di volte anche con FileCommander di non poter 
cancellare directory o file che risultavano in uso ma non lo erano in 
realtà oppure non poter creare directory già cancellate.
In generale basta aspettare qualche minuto (flush della cache su disco?) 
e funziona.



Temo non sia cosi' semplice! Alla fine del backup mi trovo con questa 
finestra VIO aperta da BackAgain (che si e' gia' chiuso da un po'), 
con dentro il mex incriminato (SYS0032). Aspetto aspetto, rilanciando 
ogni tanto il comando rename, la risposta e' sempre SYS0032.
Apro un'altra finestra VIO, faccio copia e incolla del comando rename 
nella nuova finestra VIO, lo lancio e ancora SYS0032.
Chiudo la finestra a suo tempo aperta da BackAgain e nella nuova 
finestra il rename funziona!!!
Mah, per intanto provo a mettere SysSleep a 300; domani vedro'...


 by another process.
è capitato anche a me scrivendo un filtro per weasel.
Io ho risolto sostituendo il RENAME: con DELETE oldfile, COPY newfile
oldfile, DELETE newfile. Non è elegante ma funziona.
ciao,
Piersante

 
Scusa, ma non e' elegante per un cacchio! Sono blocchi da 100 e piu' 
Mb, non mi va mica bene di farglieli riscrivere ogni volta!
Tra parentesi, anche con SysSleep 300 il problema permane. Non c'e' 
un'utility che permetta di vedere chi e' che blocca il file?


> Scusa, ma non e' elegante per un cacchio! Sono blocchi da 100 e piu'
Mai detto che fosse elegante :-)
Comunque hai ragione, nel mio caso in genere si tratta di poche righe, ma se
c'è un attachment può essere un lavorone.
Sembra esserci un problema con la chiusura del file.
Io ho usato LINEOUT namefile, che però è considerato insicuro (non dà
messaggi di errore). Il metodo consigliato sarebbe   rc = stream(myFile,
"c", "close");
Ora però non ho osso sottomano..
Piersante

 un'utility che permetta di vedere chi e' che blocca il file?
Sotto Unix c'è fuser, vedi se esiste qualche port o qualcosa si similare 
per OS2... :?
E se lo trovi dimmelo! :D

 
ripensandoci, forse il mio problema era che RENAME non accetta la
lettera del drive nel path (errore di sintassi) e non che il file
restava aperto. 
Piersante



Buone dritte! Provero' a fare qualche esperimento.



uhm, rileggendo il tuo primo post mi sembra che tu non apri o chiudi nessun
file prima del rename. Il che mi fa supporre che sia Backagain che si tiene
il file e non lo molla fino a dopo che il tuo programma è "rtornato". Nel
qual caso non vedo cosa ci si possa fare :-(
Piersante

 qual caso non vedo cosa ci si possa fare :-(
No, ho anche provato a chiudere BackAgain mentre SysSleep girava, ma 
la cosa non e' cambiata.
Ho provato a mettere
stream('Giornaliero_' || translate(date('W')) || '.DAT','c','close')
Domani vedro' se serve, altrimenti ho in mente un ripiego accettabile.
Certo che e' strano!
