Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   obtener la ruta de la carpeta temporal de un usuario (https://www.clubdelphi.com/foros/showthread.php?t=52361)

dtomeysoto 18-01-2008 14:45:55

obtener la ruta de la carpeta temporal de un usuario
 
Amigos del club como puedo obtener para el usuario que ha ejecutado una aplicacione que estoy desarrollando la ruta de la carpeta temporal de este?

por ejemplo: para el usuario pepe sería algo así como C:\Documents and Settings\pepe\Configuración local\Temp

Gracias.

duilioisola 18-01-2008 14:48:58

la ruta temporal se guarda en la variable de sistema %temp%

si haces cd %temp% te llevará a donde tu quieres.

Supongo que podrás utilizarla en tu aplicación ...

duilioisola 18-01-2008 15:16:58

Esto lo he encontrado aqui

El directorio de Windows

Código Delphi [-]
uses SysUtils, Windows;

function GetWindowsDir: TFileName;
var
  WinDir: array [0..MAX_PATH-1] of char;
begin
  SetString(Result, WinDir, GetWindowsDirectory(WinDir, MAX_PATH));
  if Result = '' then
    raise Exception.Create(SysErrorMessage(GetLastError));
end;

El directorio de los archivos de sistema

Código Delphi [-]
function GetSystemDir: TFileName;
var
  SysDir: array [0..MAX_PATH-1] of char;
begin
  SetString(Result, SysDir, GetSystemDirectory(SysDir, MAX_PATH));
  if Result = '' then
    raise Exception.Create(SysErrorMessage(GetLastError));
end;

El directorio de los archivos de programa

Código Delphi [-]
function GetProgramFilesDir: TFileName;
begin
  Result := GetRegistryData(HKEY_LOCAL_MACHINE,
    '\Software\Microsoft\Windows\CurrentVersion',
    'ProgramFilesDir');  // o 'ProgramFilesPath'
end;

El directorio temporal

Este es el directorio donde las aplicaciones guardan archivos temporales. No debería usar para este propósito el directorio donde se encuentra su aplicación por dos razones: 1) Usar un directorio temporal común facilita a los usuarios el proceso de limpieza cuando quieren recuperar espacio no usado en el disco duro, y 2) En Windows NT el usuario (y consiguientemente también su aplicación) puede que no tenga suficientes permisos para crear archivos en el directorio donde está instalada la aplicación.

La siguiente función devuelve la ubicación del directorio temporal, e intenta crearlo si no existe.

Código Delphi [-]
function GetTempDir: TFileName;
var
  TmpDir: array [0..MAX_PATH-1] of char;
begin
  try
    SetString(Result, TmpDir, GetTempPath(MAX_PATH, TmpDir));
    if not DirectoryExists(Result) then
      if not CreateDirectory(PChar(Result), nil) then begin
        Result := IncludeTrailingBackslash(GetWindowsDir) + 'TEMP';
        if not DirectoryExists(Result) then
          if not CreateDirectory(Pointer(Result), nil) then begin
            Result := ExtractFileDrive(Result) + '\TEMP';
            if not DirectoryExists(Result) then
              if not CreateDirectory(Pointer(Result), nil) then begin
                Result := ExtractFileDrive(Result) + '\TMP';
                if not DirectoryExists(Result) then
                  if not CreateDirectory(Pointer(Result), nil) then begin
                    raise Exception.Create(SysErrorMessage(GetLastError));
                  end;
              end;
          end;
      end;
  except
    Result := '';
    raise;
  end;
end;

Chris 18-01-2008 15:57:10

Hola dtomeysoto
Si lo único que quieres es obtener la ruta de la carpeta temporal para el usuario activo, utiliza este código:
Código Delphi [-]
function GetTempDir: string;
var
  Buffer : Array[0..Max_path] of char;
begin
  FillChar(Buffer,Max_Path + 1, 0);
  GetTempPath(Max_path, Buffer);
  Result := String(Buffer);
  if Result[Length(Result)] <> '\' then Result := Result + '\';
end;

Saludos.

gatosoft 16-03-2018 18:25:29

también está:

Código Delphi [-]
ElPath:= System.SysUtils.GetEnvironmentVariable('TEMP')


Wiki

escafandra 17-03-2018 21:42:45

El problema de encontrar la carpeta temporal no radica tanto en ello como en que el sistema devuelve un nombre corto de archivo y puede que nos interese el largo. Mi propuesta ya le dejé aquí, pero la repito.

Código Delphi [-]
function GetLongPathName(ShortPath, LongPath: PAnsiCHAR; size: DWORD): DWORD; stdcall; external 'Kernel32.dll' name 'GetLongPathNameA';



function GetTempFolder: String;
var
  buffer: array [0..MAX_PATH-1] of AnsiChar;
begin
  GetLongPathName(PAnsiCHAR(GetEnvironmentVariable('temp')), buffer, sizeof(buffer));
  Result:= buffer;
end;


La franja horaria es GMT +2. Ahora son las 00:30:52.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi