4

我正在尝试编写代码来完成Dropbox Core API python SDK 中记录的这种特殊情况。

[path, nil]:表示 Dropbox 上的路径中没有文件/文件夹。要更新您的本地状态以匹配,请删除路径中的所有内容,包括任何子项(您有时还会获得子项的“删除”增量条目,但这不能保证)。如果您当地的州在路径中没有任何内容,请忽略此条目。

API 指出返回[path]的内容不区分大小写。

请记住:Dropbox 以不区分大小写但保留大小写的方式处理文件名。为方便起见,上面的路径字符串是实际路径的小写版本。元数据字典具有原始的、保留大小写的路径。

如果我不知道路径的大小写保留版本,如何从系统中删除相关文件或目录?

如果相关的话,我的操作系统是 Linux,尽管我希望尽可能地获得一个在 Windows 上也能运行的解决方案。

4

2 回答 2

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 回答