2017-04-18 50 views
1

我正在編寫一個使用Delphi 10.2東京Firemonkey的多平臺應用程序。我需要檢查的一件事是如果Dropbox存在於計算機上。爲此,我需要檢查是否存在info.json文件,然後處理該json文件以獲取Dropbox文件夾的路徑。德爾福 - 檢查OSX上的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(不管第二個參數是TrueFalse)。如果我打開一個終端窗口並執行cd ~/.dropbox,然後dir,我在那裏看到info.json文件。

圍繞我失蹤的任何想法?將不勝感激關於此的任何指針...

+0

你確定你真的需要這種彎曲的雙重否定邏輯嗎? 'DropboxExists:= FileExists('〜/ .dropbox/info.json',True)' –

+0

這只是一個獨立的代碼片段來顯示問題 - 而不是我的應用程序中的實際代碼。在我的實際代碼中,我找到了該文件並解析了json以獲取Dropbox文件夾的實際位置。但我同意你的觀點,它可能與你的建議一樣緊湊:) – Rohit

+1

如果刪除'FileExists()'檢查,你能否使用相同的路徑加載文件?如果是這樣,那麼只需忘記'FileExists()'並始終無條件加載文件並根據需要處理任何加載錯誤。 –

回答

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%

+0

感謝您的編輯,@RemyLebeau :) – Rohit