1

我正在使用 Delphi 10.2 Tokyo Firemonkey 编写一个多平台应用程序。我需要检查的一件事是计算机上是否存在 Dropbox。为此,我需要检查是否存在 info.json 文件,然后处理该 json 文件以获取 Dropbox 文件夹的路径。

我编写了这个函数来检查 Dropbox 的存在:

class function TUtilityMac.DropboxExists: Boolean;
var
  infojsonpath: String;
begin
  Result:=false;
  infojsonpath:='~/.dropbox/info.json';
  if not FileExists (infojsonpath, True) then
    exit;
  Result:=true;
end;

但是当我在 Mac(安装了 Dropbox)上运行它时,FileExists函数会返回false(不管第二个参数是Trueor False)。如果我打开一个终端窗口并执行 acd ~/.dropbox然后 a dir,我会在那里看到 info.json 文件。

关于我所缺少的任何想法?将不胜感激有关此的任何指示...

4

1 回答 1

2

好吧-我想通了(通过反复试验)。

问题是,当我们使用文字时~/.dropbox,Delphi 正在寻找那个精确的文件夹,而这个文件夹当然不存在。OSX 上的~是指用户的目录(例如,在我的情况下是/Users/rohit)。因此,如果我将 替换为~/Users/rohit应用程序会找到该文件,并且一切都按预期工作。

为了答案的完整性,函数可以写成:

class function TUtilityMac.DropboxExists: Boolean;
var
  infojsonpath: String;
begin
  infojsonpath := IncludeTrailingPathDelimiter(GetHomePath) + '.dropbox/info.json';
  Result := FileExists(infojsonpath, True);
end;

注意这里的关键是用来GetHomePath()获取OSX上当前用户的目录;在 Windows 上,它返回当前用户的%APPDATA%文件夹。

于 2017-04-19T14:57:12.703 回答