è da qualche giorno che sto perdendo il genio dietro ad un "Errore di I/O" con kill().
In pratica sto lavorando al travaso dei dati da un file di Calc ad un altro.
Ho il file 1113.ods da cui faccio partire la procedura che esegue questi passi:
1. copia 1113.ods in 1113-backup.ods su disco.
2. salva 1113.ods in 1113-tmp.ods
3. crea un nuovo 1113.ods in cui riversa i dati da 1113-tmp.ods
4. salva 1113.ods
5. chiude 1113-tmp.ods e lo cancella
Va tutto bene fino a quando, alla fine, il kill() manda LibreOffice in ERRORE DI I/O
Qui di seguito, per brevità, c'è la macro che sintetizza i punti 4. e 5., che così com'è funziona, ma inserita nel contesto complessivo genera l'errore.
Codice: Seleziona tutto
Sub salva_chiudi_cancella
rem ----------------------------------------------------------------------
rem 4. salva 1113.ods
' salvo il doc corrente
oDocFrame = ThisComponent.getCurrentController().getFrame()
oDispatchHelper = createUnoService("com.sun.star.frame.DispatchHelper")
oDispatchHelper.executeDispatch(oDocFrame, ".uno:Save", "", 0, Array())
rem ----------------------------------------------------------------------
rem 5. chiude 1113-tmp.ods e lo cancella
' chiudo il doc -tmp
sUrl = converttourl ("W:\_tmp\1113-tmp.ods")
rem ----------------------------------------------------------------------
Target = StarDesktop.loadComponentFromURL(sUrl, "_default",0 , Array())
aFocusEvent = CreateUnoStruct("com.sun.star.awt.FocusEvent")
Target.getCurrentController().getFrame().focusGained(aFocusEvent)
rem ----------------------------------------------------------------------
If HasUnoInterfaces(thisComponent, "com.sun.star.util.XCloseable") Then
thisComponent.close(true)
Else
thisComponent.dispose()
End If
rem ----------------------------------------------------------------------
' cancello il doc -tmp
Kill(sUrl)
rem ----------------------------------------------------------------------
End Sub