【问题标题】:Delphi - Checking for Dropbox on OSXDelphi - 在 OSX 上检查 Dropbox
【发布时间】:2017-04-18 05:48:59
【问题描述】:

我正在使用 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(不管第二个参数是 True 还是 False)。如果我打开一个终端窗口并执行cd ~/.dropbox,然后执行dir,我会在那里看到 info.json 文件。

对我所缺少的有什么想法吗?不胜感激有关此的任何指示...

【问题讨论】:

  • 你确定你真的需要这个弯曲的双重否定逻辑吗? DropboxExists := FileExists('~/.dropbox/info.json', True)
  • 这只是一个显示问题的独立代码 sn-p - 不是我应用程序中的实际代码。在我的实际代码中,我找到该文件并解析 json 以获取 Dropbox 文件夹的实际位置。但我同意你的看法,它本来可以像你建议的那样紧凑:)
  • 如果你去掉FileExists()检查,你能用相同的路径加载文件吗?如果是这样,那么忘记FileExists() 并始终无条件加载文件并根据需要处理任何加载错误。
  • 谢谢@RemyLebeau - 会试一试,让你知道结果如何......
  • @RemyLebeau - 我在尝试加载文件时收到了EFileNotFoundException。但该文件存在。知道会发生什么吗?

标签: delphi firemonkey delphi-10.2-tokyo


【解决方案1】:

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

问题在于,当我们使用文字 ~/.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% 文件夹。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-02
    • 2017-06-30
    • 1970-01-01
    • 2012-02-07
    • 2013-01-12
    • 2016-05-18
    • 2016-08-05
    相关资源
    最近更新 更多