So I needed to find two things to get to the desired result:
- A way to determine the platform type
- A location where to store temporary files (platform dependent)
- Here's the final code snippet
A way to determine the platform type
All I could find was the getGuiType() function which returns- 1 for Windows
- 3 for MacOS
- 4 for Unix
and a repeated comment that this function exists for downward compatibility without explaining what the current approach should be.
A location where to store temporary files (platform dependent)
For MacOS and Unix systems /tmp is the obvious place to store temporary files (/var/tmp would probably also ok, even better a user specific dir like /var/tmp/$USER but one would need to ensure first that it really exists and is writable).On Windows that is a little more complex but the environment variable TEMP seems to be set for all users (different though for each user) and thus a good choice.
Code snippet
' This code creates a temporary file called 'data.lst'
' with a path which works for each OS
Dim sUrl As String
Dim sFile As String
sFile = "/data.lst"
If GetGuiType = 1 Then
sUrl = "file:" + Environ("TEMP") + sFile
Else
sUrl = "file:///tmp" + sFile
End If
' Now create some data and store them into the temp file
Dim myData() 'Array to store some data
' Fill myData with contents assuming there are n data points
' ReDim myData(n)
' myData(0) = ...
' myData(1) = ...
' ...
' Call function SaveDataToFile from the OpenOffice.org Macros library 'Tools -> UCB'
SaveDataToFile(sUrl,myData())
A safer approach would be to use an environment variable (e.g. TEMP) for any OS, check whether this env var exists and the value is a writable directory and then use it but safer means (as almost always) more coding. /tmp was invented for the lazy :-)
No comments:
Post a Comment