【问题标题】:How to access user directory in lazarus?如何访问lazarus中的用户目录?
【发布时间】:2026-02-15 12:35:01
【问题描述】:

我正在尝试打开文件changelog.txt,无论哪个用户打开它,我都需要打开它。然而,它总是位于~/ 目录中。访问文件。这是我的代码:

procedure TForm1.FormCreate(Sender: TObject);
var myFile : TextFile;
    line   : string;
begin
     AssignFile(myFile, '~/changelog.txt');
     Reset(myFile);
       while not Eof(myFile) do
       begin
            ReadLn(myFile, line);
            Label3.Caption := (Label3.Caption + line + #13#10);
       end;
       CloseFile(myFile);
end;

它不起作用。但是,如果我用实际用户名替换 ~,它就可以工作。但是,我无法知道将运行我的程序的每个用户的用户名。任何想法如何获得启动程序的用户的用户名?谢谢!

Edit1:我试过这个,但它也包含一个新行:

RunCommand('/bin/bash',['-c','whoami'],user); 

【问题讨论】:

    标签: lazarus


    【解决方案1】:

    这是正常的。 "~" 是一个 shell 级别的概念,因此需要一个单独的 shell 调用来评估。但是,Assignfile 直接调用内核接口,因此不理解这一点。

    使用getenvironmentvariable('HOME') 从环境中获取主目录。更好的是,getuserdir 允许以跨平台方式获取主目录。

    【讨论】:

    • SysUtils.GetUserDir - 对于 *nix,它与 getenvironmentvariable('HOME') 相同,但也是跨平台的。
    最近更新 更多