1

我需要从 TD 6.3 程序中获取 Windows 10 中的某些特殊 Windows 文件夹,例如 Program Files、用户或 Appdata。这有什么特定的功能吗?我浏览了帮助,但似乎找不到它。

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

关键是我需要从网络位置获取一些临时文件到本地机器才能使用它们,因为我只有对网络驱动器的读取权限。到目前为止,我只是在 C:\ 中创建了一个临时文件夹,这在调试中非常有效,但是当我构建程序然后尝试运行它时,由于某种原因它没有获取文件并且临时文件夹保持为空. 认为这是一个权限问题,我尝试以管理员身份运行,但无济于事。我有点不知道为什么它不起作用,所以任何输入都值得赞赏。我只是使用 SalFileCopy 将所需文件从网络驱动器复制到临时文件夹,并将覆盖标志设置为 true。

4

2 回答 2

1

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

于 2020-01-13T11:17:06.173 回答
1

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

VisDosGetEnvString('appdata')

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

于 2020-01-31T07:59:03.833 回答