|
Obteniendo los directorios importantes de Windows
Copyright © 2000 Ernesto
De Spirito
Introducción
Muchos creen que el directorio de Windows es C:\WINDOWS, que el
directorio System es C:\WINDOWS\SYSTEM, que el directorio temporal
es C:\WINDOWS\TEMP y que el directorio de los archivos de programa
es C:\ARCHIVOS DE PROGRAMA. Bien, el hecho es que esto no siempre
es verdad. Por ejemplo, el directorio temporal es determinado habitualmente por
variables de entorno, y en las instalaciones en inglés el directorio de los
archivos de programa predeterminado es C:\PROGRAM FILES.
Aquí presentamos un conjunto de funciones para obtener la ubicación real de
estos directorios importantes. Estas funciones necesitan las
unidades Windows y SysUtils. Todas generan una
excepción si fallan.
El directorio de Windows
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
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
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.
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;
|