получение темпового пути Лотус кроссплатформенно

  • Автор темы hosm
  • Дата начала
H

hosm

получение темпового пути [post="166882"]отсюда[/post]
Пример от lmike: по файловому пути - домина юзает "свой" темп, и его надо получить (источника не помню, приведу код):
Код:
'Class_TempFolderManager:

Const ERR_UNSUPPORTED_PLATFORM = 20300 ' arbitrary value
Private agentLog As NotesLog
Class TempFolderManager
m_path As String
m_files List As Integer

Function Unique As String
Dim unik
unik = Evaluate("@Unique")
Unique = Strtoken(unik(0), "-", -1)    ' drop the username part of the ID which is always the same for this user
End Function

Sub New
m_path = GetNotesTempDirectory & "/" & Unique
Mkdir m_path
End Sub

Public Property Get Path As String
Path = m_path
End Property

Function NewFilename(Byval strSuffix$, Byval bManage As Boolean) As String
Dim strFName$
strFName = Unique
If strSuffix <> "" Then strFName = strFName & "." & strSuffix
NewFilename = m_path & "/" & strFName
If bManage Then
m_files(NewFilename) = 0
End If
End Function

Sub Manage(Byval strPath$)
m_files(strPath) = 1
End Sub

Sub Unmanage(Byval strPath$)
On Error Resume Next
Erase m_files(strPath)
End Sub

Function ClearFiles( ) As Boolean
' erase all files under management but leave the directory so that we can use it more.
' return True if all files were successfully erased.
On Error Goto failed
ClearFiles = True
Forall ffileno In m_files
Kill Listtag(ffileno)
nextFile:
End Forall
Erase m_files
Exit Function
failed:
ClearFiles = False
Resume nextFile
End Function

Sub Delete
On Error Resume Next
If ClearFiles Then Rmdir m_path
End Sub
End Class
Declare Function w32_OSGetSystemTempDirectory Lib "nnotes" Alias "OSGetSystemTempDirectory" ( Byval S As String) As Integer
Declare Function mac_OSGetSystemTempDirectory Lib "NotesLib" Alias "OSGetSystemTempDirectory" ( Byval S As String) As Integer
Declare Function linux_OSGetSystemTempDirectory Lib "libnotes.so" Alias "OSGetSystemTempDirectory" ( Byval S As String) As Integer

Function GetNotesTempDirectory() As String
' Returns the path of the temporary directory used by Notes.
' Not same as system or user temp dir that you can get e.g. with Environ("TEMP") in Windows.
' Main reasons to use this instead: works crossplatform, and partitioned servers each need
' their own temp dir to avoid interfering with each other.
Dim session As New NotesSession
Dim d As String * 256
Dim s%
Select Case session.Platform
Case "Linux"
s% = linux_OSGetSystemTempDirectory(d)
Case "Macintosh"
s% = mac_OSGetSystemTempDirectory(d)
Case "Windows/32"
s% = w32_OSGetSystemTempDirectory(d)
Case Else
Error ERR_UNSUPPORTED_PLATFORM, "In GetNotesTempDirectory, platform not supported: " & session.Platform
End Select
GetNotesTempDirectory = Left$(d, s%)
End Function

P.S. Особенности Lotus в Mac OS X обсуждаются в начале темы Вопросы по Macos
 
Последнее редактирование модератором:

savl

Lotus Team
28.10.2011
2 619
311
BIT
566
Для ОС отличной от Windows временная переменная не вернется.
Правильная сигнатура, например Linux:
Код:
Declare Function linux_OSGetSystemTempDirectory Lib "libnotes.so" Alias "OSGetSystemTempDirectory" ( ByVal S As String, ByVal bufferLen As Integer) As Integer
Значение bufferLen по умолчанию 0, Windows это обрабатывает корректно и возвращает как надо.
Другие системы не могут выделить память для строки и в результате приходит пустота.
 

garrick

Lotus Team
26.10.2009
1 356
149
BIT
353
Visual Basic:
Environ("TEMP")
не работает?
 

savl

Lotus Team
28.10.2011
2 619
311
BIT
566
Visual Basic:
Environ("TEMP")
не работает?
Там другое имя: TMP / TMPDIR и обычно она не задана, для этого надо еще прописать пар строк.
через NOTES_TEMPDIR в notes.ini можно задать путь и оттуда брать
Но вот работа данной функции на nix только с двумя параметрами.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 949
602
BIT
410
Для ОС отличной от Windows временная переменная не вернется.
Правильная сигнатура, например Linux:
Код:
Declare Function linux_OSGetSystemTempDirectory Lib "libnotes.so" Alias "OSGetSystemTempDirectory" ( ByVal S As String, ByVal bufferLen As Integer) As Integer
Значение bufferLen по умолчанию 0, Windows это обрабатывает корректно и возвращает как надо.
Другие системы не могут выделить память для строки и в результате приходит пустота.
в виндовс длина пути не более 255
в "других" системах зависит от ФС, полагаю - это и служит причиной, что "корректно возвращает" только для винды (и для JNA, например - тоже константа в коде уже руками сделали)
маловероятно что домина знает об ФС (что нормально), а для винды тупо нахардкодили
отсюда ещё один момент - не "закапывать" tmp на никсах "глубоко" (хотя путь и может быть длиннее 255)
 
Последнее редактирование:
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!