Dropbox 及其类似“文件夹”的设计

2024-06-28

我想知道从程序员的角度(最好是 C# 或 Java)来看,在操作系统中操作文件夹来执行您想要的操作(例如像 FTP 一样)有多难?

图片http://www.jacks-log.de/wp-content/uploads/2011/02/Dropbox-Wurmloch-1.png http://www.jacks-log.de/wp-content/uploads/2011/02/Dropbox-Wurmloch-1.png

自从几年前听说 dropbox 以来,我一直想知道这样做涉及什么?


尤其是 Dropbox,它们不会做任何棘手的事情 - 只是使用 Windows 用户模式 ​​API 提供的机制监视常规文件夹。

不过,使用内核模式驱动程序可以做更强大、更有趣的事情。

您可以做的第一件事是创建一个虚拟磁盘并将其映射到该文件夹​​。这样,您的代码(在我们产品的帮助下,无论是内核模式还是用户模式)将能够处理对此文件夹中文件的所有操作系统请求。该文件夹不会存在于磁盘上,而是虚拟的。您可以即时从远程服务器中选取数据,将它们写入远程服务器等。特别是,您可以将远程 SFTP 服务器映射到文件夹(使用 FTP 时情况会稍微复杂一些,因为 FTP 不支持部分上传)。一些云提供商的做法正是我所描述的 - 他们提供虚拟磁盘或虚拟文件夹,这是其云服务的“大门”,当您从此类虚拟文件夹或磁盘读取或写入数据时,数据会从云中传入/传出服务器。

接下来的事情是,在文件系统过滤器驱动程序的帮助下,您可以拥有一个真实的文件夹,但动态提供文件内容。这就是某些文件夹加密器的做法(它们在将文件数据写入真实磁盘时对其进行加密,如果没有激活此加密器,您将仅从此文件夹中的文件中读取加密的“垃圾”)。

现在,使用文件系统过滤器驱动程序,您可以控制谁以及如何访问该文件夹,即您可以对文件夹内容的访问进行细粒度控制(将其与加密相结合,您将获得方便的数据保护机制)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Dropbox 及其类似“文件夹”的设计 的相关文章

随机推荐

  • Eslint 错误:不要嵌套三元表达式

    我正在使用 React js 开发一个项目 并且使用 eslint 时出现此错误 不要嵌套三元表达式 这是我的代码 const MyApp gt return lt gt var1 var2
  • 是否可以加载没有图像名称的图像?

    是否可以加载没有图像名称的图像 像这样 img src http www example com 只使用 URL 的原因是因为 URL 上每次都会有其他图像 因此图像名称是动态的 是的 当然了 请记住 文件系统和 HTTP 请求 响应之间存
  • 在 Spark 中访问数组列

    Spark DataFrame 包含类型为 Array Double 的列 当我尝试将其返回到 map 函数时 它会抛出 ClassCastException 异常 以下 Scala 代码生成异常 case class Dummy x Ar
  • PowerShell:导入不带标题的 CSV 并删除部分重复行

    我有一个日志文件 其格式为 CSV 没有标题 第一列基本上是所记录问题的唯一标识符 对于同一问题标识符 可能有多行具有不同的详细信息 我想删除第一列重复的行 因为此时我不需要其他数据 目前我对 PowerShell 已经有了相当基本的了解
  • Spring @Before 更改每个用户登录名

    我有一个 Aspect 类 它执行 Before 方法并拦截用户登录时带有某些 Id 的所有查询 但问题是 每次用户登录时 所有登录用户的 Before 方法的 Id 都会发生变化 只需更改当前用户即可 简单的过程 当用户登录时 Aspec
  • 什么是德米特法则?

    让我们从维基百科开始 更正式地说 函数的德米特定律要求有一种方法m一个物体的O只能调用以下类型对象的方法 O itself m的参数 m 内创建 实例化的任何对象 O 的直接组件对象 全局变量 可通过 O 访问 范围为 m Rule 1 p
  • Angularjs ng-repeat 数组 - 重复值

    所以我刚刚开始使用 Angular JS 在处理数组时对 ng repeat 有点困惑 下面的代码不能按原样工作 但是当我将 dayNames 更改为对象并为其提供键值对时 就可以了 var myApp angular module exa
  • python itertools.permutations 的算法

    有人可以解释一下算法吗itertools permutationsPython 标准库 2 6 中的例程 我不明白为什么它有效 Code is def permutations iterable r None permutations AB
  • 如何在悬停时停止当前位置的CSS动画?

    我有一个 div 里面移动另一个 div 我需要停下来 block当我将鼠标悬停在当前位置时 container 怎么做 HTML div class container div class block div div CSS contai
  • 如何按条件删除列?

    假设df是一只熊猫DataFrame object 如何删除所有列df只包含None 空字符串或仅包含空格的字符串 删除的标准可以表示为所有值都产生的那些列True当输入以下测试函数时 lambda x x is None or not r
  • iOS 5 中的方法 Swizzling?

    Apple 在 iOS 5 中阻止了 Method Swizzling 吗 我做了一些尝试 发现带有 Method Swizzling 的应用程序可以在 iOS 4 上运行 但不能在 iOS 5 上运行 注意 该应用程序适用于 iOS 5
  • Wamp服务器启动错误“-无法启动[Ephase错误]”

    下载 WAMP 服务器后 会弹出一个窗口 显示 配置文件包含在线语法错误 1235 EParseError 参数 service 指定了未知服务 我不知道这个问题是什么类型 有人遇到过此类问题吗 我该如何解决此类问题 如果您要安装 WAMP
  • org.hibernate.QueryParameterException:无法找到命名参数[userId]

    我需要帮助 我遇到了上述异常 我哪里错了 在从类到表的映射中 我使用了以下内容 private String userId private String password 下面是我编写查询的类 public class LoginManag
  • java 中的预处理器日志记录语句

    例如我想在编译之前替换 debug enclosing method this is debug message for userName with if log isDebugEnabled log debug
  • 使用 python 添加注释到 jpeg 文件

    我想编写一个 python 程序 向 jpeg 文件添加注释 我读到 jpeg 文件中的注释由标记 0xfffe 表示 因此 我可以打开文件并在该标记后附加我想要的任何注释吗 我的代码看起来像这样 file open someimage j
  • ORACLE 更新并返回 OLD 和 NEW 值

    PL SQL Oracle 12c 中是否有与此 T SQL 查询等效的内容 UPDATE A SET A columnA 10 WHERE A columnB lt 30 OUTPUT INSERTED DELETED 查询更新表A 同时
  • 有关基本 .htaccess mod_rewrite 的帮助

    我目前正在使用 php 解释子域通配符 我想使用 htaccess 处理它们 用户配置文件将在以下位置访问http 用户名 mysite com http username mysite com 或者对于某些人来说http www 用户名
  • 在 IE 中调试模式对话框 (showModalDialog)

    我想调试 检查 DOM 使用交互式 JS 控制台等 Web 应用程序的一部分 该应用程序位于由showModalDialog 我找不到使用标准 IE 8 开发人员工具的方法 该对话框没有工具栏 并且常用的快捷键 F12 不起作用 另一个SO
  • 有人可以离线编辑 javascript 文件来运行恶意代码吗?

    我担心与我网站的 javascript 文件相关的问题 我不确定这是否可行 当有人访问网站时会下载js文件 如果有人编辑下载的js脚本并插入自己的代码 然后刷新网站怎么办 在新的刷新中 网站将读取编辑后的 Js 文件并运行恶意代码 恶意代码
  • Dropbox 及其类似“文件夹”的设计

    我想知道从程序员的角度 最好是 C 或 Java 来看 在操作系统中操作文件夹来执行您想要的操作 例如像 FTP 一样 有多难 图片http www jacks log de wp content uploads 2011 02 Dropb