4

Dropbox Core API python SDK に記載されているこの特定のケースを満たすコードを作成しようとしています。

[path, nil]: Dropbox 上のパスにファイル/フォルダーがないことを示します。一致するようにローカルの状態を更新するには、子を含め、パスにあるものをすべて削除します (子のデルタ エントリを「削除」することもありますが、これは保証されません)。ローカル状態のパスに何もない場合は、このエントリを無視してください。

API は、返された[path]が大文字と小文字を区別しないことに注意します。

注意: Dropbox ではファイル名の大文字と小文字は区別されませんが、大文字と小文字は保持されます。これを容易にするために、上記のパス文字列は実際のパスの小文字バージョンです。メタデータ辞書には、大文字と小文字が保持された元のパスがあります。

大文字と小文字が区別されたパスのバージョンがわからない場合、問題のファイルまたはディレクトリをシステムから削除するにはどうすればよいですか?

関連する場合、私のオペレーティング システムは Linux ですが、可能であれば Windows でも動作するソリューションを取得したいと考えています。

4

2 に答える 2

1

小文字のパスから元の大文字と小文字を区別するパスを復元できるようにする必要がある場合 (たとえば、ローカルの大文字と小文字を区別するファイル システム用)、1 つの解決策は、元のパスのクライアント側への小文字のパスのマッピングを維持することです。具体的な実装の詳細はあなた次第ですが、単純なキーと値のストアであれば、おそらくうまくいくでしょう。

次に、これらの削除のいずれかを取得すると、このマッピングを使用して元のパスを検索し、それに応じて処理できます。

于 2013-09-11T19:47:27.377 に答える
1

これが少し遅れていることは知っていますが、同じ問題に遭遇し、別の解決策を思いつきました。たぶん、これを見ている人はこの方法を好むでしょう。

私の API は Linux サーバーでのみ使用される予定であり、削除は比較的めったに起こらないため、Linux の find コマンドに頼っていました。

    # LINUX ONLY
    cmd = "find {0} -iwholename '{1}'".format(basepath, caseInsensitivePath)
    with os.popen(cmd) as f:
        caseSensitivePath = f.read()[:-1] # -1 to remove the '\n'
        # error if more than 1 line
        if caseSensitivePath.find('\n') != -1:
            print "Found multiple results including: \n", caseSensitivePath
            msg = "[!]ERROR Could not delete {0}. Multiple case-sensitive results exist".format(caseInsensitivePath)
            raise Exception(msg)
        else:
            return caseSensitivePath

basepathは、検索のベース パスです。ルート「/」よりも正確なものを使用する方法を見つけることをお勧めします。私の場合、同期フォルダーに既にパスのリストがあったため、次のように比較できました。

caseInsensitivePath = caseInsensitivePath.lower()
# find basepath
basepath = assets_root
for folder in self.myDict.keys():
    if caseInsensitivePath.lower().startswith(folder.lower()):
        basepath = folder

caseInsensitivePath はパス名です。

于 2014-01-27T02:51:27.573 に答える