Как получить переменную папку (например, файлы программы или пользователя) в TeamDeveloper 6.3? - PullRequest
1 голос
/ 12 января 2020

Мне нужно получить определенные специальные windows папки в Windows 10 из программы TD 6.3 - например, Program Files, пользователя или Appdata. Есть ли определенная функция для этого? Я просмотрел справку, но не могу найти ее.

Мне также нужно проверить, имеет ли программа в настоящее время доступ для чтения / записи к указанной мной папке. Я подозреваю, что последнее может быть достигнуто путем попытки SalFileOpen или SalFileWrite соответственно и проверки результата.

Дело в том, что мне нужно получить некоторые временные файлы из сетевого расположения на локальный компьютер, чтобы иметь возможность использовать их , поскольку у меня есть доступ только для чтения к сетевому диску. На данный момент я просто создал временную папку в C: \, это прекрасно работает при отладке, но когда я собираю программу, а затем пытаюсь ее запустить, по какой-то причине она не получает файлы и временную папку остается пустым Думая, что это была проблема с разрешением, я попытался запустить от имени администратора безрезультатно. Я как бы в растерянности относительно того, почему это не сработает, поэтому любой вклад приветствуется. Я просто копирую нужные файлы с сетевого диска во временную папку с помощью SalFileCopy с установленным в true флагом перезаписи.

Ответы [ 2 ]

1 голос
/ 31 января 2020

Если вам нужен какой-либо путь переменных среды (например, appdata), вы можете использовать

VisDosGetEnvString ('appdata')

Этот метод является частью Visual Tool Chest (vt. apl lib в установочном каталоге)

1 голос
/ 13 января 2020

Для этого вы можете использовать windows API-функции. Чтобы получить временный путь, вы можете использовать следующее: Определите внешнюю функцию:

Kernel32.dll
Function: GetTempPathW
Return
    DWORD
Parameters:
    Number: DWORD    ! nBufferLength [in] The size of the string buffer identified by lpBuffer, in TCHARs.
    Receive String: LPWSTR    ! lpBuffer [out] A pointer to a string buffer that receives the null-terminated string

Используйте ее так:

Function: GetTempPath           ! __exported
    Description: WinAPI: This function retrieves the path of the directory designated for temporary files.
    Returns
        String:
    Parameters
    Local variables
        String: sStrBuffer
        Number: nBuffLen
        Number: nNumChars
    Actions
        Set nBuffLen = 0
        Call SalSetBufferLength( sStrBuffer, nBuffLen )
        Set nBuffLen = GetTempPathW( nBuffLen, sStrBuffer )
        Call SalSetBufferLength( sStrBuffer, nBuffLen * 2 )
        Call GetTempPathW( nBuffLen, sStrBuffer )
        If SalStrRightX( sStrBuffer, 1 ) != '\\'
            Set sStrBuffer = sStrBuffer || '\\'
        Return sStrBuffer

Чтобы проверить, есть ли у вас доступ для записи, просто создайте файл в этой папке и затем удалите его.

Вот еще немного информации об API-функции windows: https://msdn.microsoft.com/de-de/library/windows/desktop/aa364992 (v = vs.85) .aspx

...