guptateamdevelopercentura

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


I need to get certain special windows folders in Windows 10 from a TD 6.3 program - for instance, Program Files, user, or Appdata. Is there a certain function for this? I've looked through the help but can't seem to find it.

I also need to check if the program currently has read/write access to a folder I specify. I suspect the latter can be achieved by trying a SalFileOpen or SalFileWrite respectively and checking the result.

The point is that I need to get some temporary files from a network location to the local machine to be able to use them, as I only have read access to the network drive. As of now I've simply created a temp folder in C:\, this works perfectly in debug, but when I build the program and then try running it, for some reason it doesn't get the files and the temp folder stays empty. Thinking this was a permission issue, I tried running as admin to no avail. I'm kind of at a loss as to why it won't work, so any input is appreciated. I simply copy the needed files from the network drive to the temp folder using SalFileCopy with the overwrite flag set to true.


Solution

  • You can use windows API-functions for that. To get the temp-path you can use the following: Define an external function:

    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
    

    Use it like that:

    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
    

    To check if you have write access just create a file in that folder and delete it afterwards.

    Here some more info about the windows API-function: https://msdn.microsoft.com/de-de/library/windows/desktop/aa364992(v=vs.85).aspx