首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何以编程方式确定Dropbox文件夹的位置?

如何以编程方式确定Dropbox文件夹的位置?
EN

Stack Overflow用户
提问于 2012-08-25 08:18:36
回答 6查看 12.6K关注 0票数 20

我有一个脚本,打算由多个用户在多台计算机上运行,但他们并不都在各自的主目录中有自己的Dropbox文件夹。我不喜欢在脚本中硬编码路径。我更愿意通过编程来弄清楚这条路。

欢迎任何建议。

编辑:我没有在脚本中使用Dropbox API,脚本只是读取用户之间共享的特定Dropbox文件夹中的文件。我唯一需要的是Dropbox文件夹的路径,因为我当然已经知道了Dropbox文件结构中的相对路径。

编辑:如果重要的话,我使用的是Windows7。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-08-25 08:54:23

我找到了答案here。将s设置为~\AppData\Roaming\Dropbox\host.db中的第2行,然后使用base64对其进行解码,即可得到路径。

代码语言:javascript
复制
def _get_appdata_path():
    import ctypes
    from ctypes import wintypes, windll
    CSIDL_APPDATA = 26
    _SHGetFolderPath = windll.shell32.SHGetFolderPathW
    _SHGetFolderPath.argtypes = [wintypes.HWND,
                                 ctypes.c_int,
                                 wintypes.HANDLE,
                                 wintypes.DWORD,
                                 wintypes.LPCWSTR]
    path_buf = wintypes.create_unicode_buffer(wintypes.MAX_PATH)
    result = _SHGetFolderPath(0, CSIDL_APPDATA, 0, 0, path_buf)
    return path_buf.value

def dropbox_home():
    from platform import system
    import base64
    import os.path
    _system = system()
    if _system in ('Windows', 'cli'):
        host_db_path = os.path.join(_get_appdata_path(),
                                    'Dropbox',
                                    'host.db')
    elif _system in ('Linux', 'Darwin'):
        host_db_path = os.path.expanduser('~'
                                          '/.dropbox'
                                          '/host.db')
    else:
        raise RuntimeError('Unknown system={}'
                           .format(_system))
    if not os.path.exists(host_db_path):
        raise RuntimeError("Config path={} doesn't exists"
                           .format(host_db_path))
    with open(host_db_path, 'r') as f:
        data = f.read().split()

    return base64.b64decode(data[1])
票数 16
EN

Stack Overflow用户

发布于 2015-03-20 22:27:33

在Dropbox Help Center上可以找到答案-- How can I programmatically find the Dropbox folder paths?

简短版本:

使用~/.dropbox/info.json%APPDATA%\Dropbox\info.json

长版本:

通过以下方式访问有效的%APPDATA%%LOCALAPPDATA%位置:

代码语言:javascript
复制
import os
from pathlib import Path
import json

try:
    json_path = (Path(os.getenv('LOCALAPPDATA'))/'Dropbox'/'info.json').resolve()
except FileNotFoundError:
    json_path = (Path(os.getenv('APPDATA'))/'Dropbox'/'info.json').resolve()

with open(str(json_path)) as f:
    j = json.load(f)

personal_dbox_path = Path(j['personal']['path'])
business_dbox_path = Path(j['business']['path'])
票数 12
EN

Stack Overflow用户

发布于 2014-09-25 08:17:51

这个基于J.F. Sebastian建议的改编适用于我的Ubuntu:

代码语言:javascript
复制
os.path.expanduser('~/Dropbox')

并将工作目录实际设置为:

代码语言:javascript
复制
os.chdir(os.path.expanduser('~/Dropbox'))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12118162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档