2017-04-18 9 views
1

私はDelphi 10.2 Tokyo Firemonkeyを使用してマルチプラットフォームアプリケーションを作成しています。チェックする必要があることの1つは、Dropboxがコンピュータに存在するかどうかです。このためには、info.jsonファイルが存在するかどうかをチェックし、jsonファイルを処理してDropboxフォルダのパスを取得する必要があります。Delphi - Dropbox for OSXの確認

私は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機能は関係なく、2番目のパラメータビーイングの( falseを返します。 Trueまたは False)。端末のウィンドウを開いて cd ~/.dropboxを実行した後に dirを実行すると、info.jsonファイルが表示されます。

私が紛失しているものについての考えはありますか?これに関するあらゆる指摘をお待ちしております...

+0

本当にこの曲線的な二重否定論理が本当に必要ですか? 'DropboxExists:= FileExists( '〜/ .dropbox/info.json'、True)' –

+0

これは単なる単体のコードであり、アプリ内の実際のコードではありません。私の実際のコードでは、ファイルを見つけ、jsonを解析してDropboxフォルダの実際の場所を取得します。しかし、私はあなたに同意します、それはあなたが示唆するようにコンパクトであったかもしれません:) – Rohit

+1

'FileExists()'チェックを削除した場合、同じパスを使ってファイルを読み込めますか?もしそうなら、 'FileExists()'を忘れて、常にファイルを無条件にロードし、必要に応じてロードエラーを処理してください。 –

答えて

2

まあ私はそれを(試行錯誤で)考え出しました。

問題は、リテラル~/.dropboxを使用すると、デルファイはその正確なフォルダを探していますが、それはもちろん存在しません。 OSX上の~は、ユーザーのディレクトリを参照しています(たとえば、私の場合は/Users/rohit)。したがって、~/Users/rohitに置き換えた場合、アプリケーションがファイルを検出し、すべてが正常に機能しました。

だけ答えの完全性のため、関数は以下のように書くことができるここで重要なのは、OSX上の現在のユーザーのディレクトリを取得するためにGetHomePath()を使用することを

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

注意。 Windowsでは、現在のユーザーの%APPDATA%フォルダーを返します。

+0

編集のおかげで@RemyLebeau :) – Rohit

関連する問題