DirectoryExists('~') под линуксом - ошибка

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Ответить
yozh
новенький
Сообщения: 25
Зарегистрирован: 01.04.2006 16:17:05

Сообщение yozh »

Почему? Как ещё я должен определять home-каталог текущего юзера?
yozh
новенький
Сообщения: 25
Зарегистрирован: 01.04.2006 16:17:05

Сообщение yozh »

Сочинил чудовищный способ, который, однако, работает...

Код: Выделить всё

uses ...,Process;
...
var
  ...
  HProc:TProcess;
  HLines:TStringList;
  i:integer;
  UserDir:string;
begin
  ...
  HProc:=TProcess.Create(nil);
  HLines:=TStringList.Create;
  HProc.CommandLine:='bash -c set';
  HProc.Options:=HProc.Options+[poUsePipes,poWaitOnExit];
  HProc.Execute;
  HLines.LoadFromStream(HProc.Output);
  for i:=0 to HLines.Count-1 do
    if (Pos('HOME=',HLines.Strings[i])=1) then
      UserDir:=Copy(HLines.Strings[i],Pos('HOME=',HLines.Strings[i])+Length('HOME='),Length(HLines.Strings[i]));
  HLines.Free;
  HProc.Free;
  ...
end;
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

Этот способ ведь читает переменные окружения...
А их можно читать и проще:

Код: Выделить всё

// специфично для FreePascal с использованием класса TCustomApplication
s := Application.EnvironmentVariable['HOME'];

или же

Код: Выделить всё

// вроде бы работает и в Delphi и во FreePascal
s := GetEnvironmentVariable('HOME');
yozh
новенький
Сообщения: 25
Зарегистрирован: 01.04.2006 16:17:05

Сообщение yozh »

OK, спасибо. Я до этого юзал Delphi 5 (делает маленькие exeшники - гораздо компактнее, чем 6), а там этого ещё не было.
Аватара пользователя
Alexander
энтузиаст
Сообщения: 864
Зарегистрирован: 18.12.2005 18:10:00
Откуда: оттуда
Контактная информация:

Сообщение Alexander »

И не будет. Делфи ж в Вин. Там всё по другому (как, я уже и не интересовался, наверное есть АПИ).

А такой фокус будет (на предмет чтения окружения) работать будет в ДОСе, Вин и даже в Линуксе !

uses Dos;

begin

WriteLn(getenv('HOME'));

end.
Ответить