如何在 TeamDeveloper 6.3 中获取变量文件夹(例如程序文件或用户)?

How do I get a variable folder (e.g. Program files or user) in TeamDeveloper 6.3?

我需要从 TD 6.3 程序中获取 Windows 10 中的某些特殊 windows 文件夹 - 例如,Program Files、user 或 Appdata。这有一定的功能吗?我已经查看了帮助,但似乎找不到它。

我还需要检查程序当前是否可以 read/write 访问我指定的文件夹。我怀疑后者可以通过分别尝试 SalFileOpen 或 SalFileWrite 并检查结果来实现。

关键是我需要从网络位置获取一些临时文件到本地计算机才能使用它们,因为我只有对网络驱动器的读取权限。 截至目前,我只是在 C:\ 中创建了一个临时文件夹,这在调试中工作得很好,但是当我构建程序然后尝试 运行 它时,由于某种原因它没有获取文件和临时文件夹保持为空。认为这是一个权限问题,我尝试 运行 作为管理员无济于事。 我对为什么它不起作用有点不知所措,因此欢迎任何意见。 我只是使用 SalFileCopy 将需要的文件从网络驱动器复制到临时文件夹,并将覆盖标志设置为 true。

您可以为此使用 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

要检查您是否有写入权限,只需在该文件夹中创建一个文件,然后将其删除。

这里有一些关于 windows API 函数的更多信息: https://msdn.microsoft.com/de-de/library/windows/desktop/aa364992(v=vs.85).aspx

如果您需要环境变量的任何路径(例如 appdata),您可以使用

VisDosGetEnvString('appdata')

该方法是 Visual Tool Chest 的一部分(vt.apl 安装目录中的库)