问题描述
这将是一个有很多假设的问题,但我已经考虑了一段时间,我终于想就如何解决这个“问题”获得一些看法。为了回答这个问题,我将编写一个示例要求,说明我想要制作的程序如何在概念层面上工作,而不需要太多细节。
问题
我想创建一个程序来跟踪文件和文件夹的杂项信息。这些杂项信息可以是任何内容,从评论、作者到更具体的信息,如文件的原始来源(例如 URL)、类别、标签等。所有这些信息都保存在 sqlite 数据库中。
现在...您将如何创建文件(或文件夹)到数据库的连接?无论向程序中添加什么文件,该文件都应继续在独立于程序的级别上运行,这意味着您应该能够编辑、复制、移动、重命名该文件或对其执行任何其他操作,而这些文件通常会在您的操作系统中执行。选择 - 甚至删除它。
您甚至应该能够对其进行存档、压缩、上传到某处或执行其他操作来临时或永久地从您的系统中删除文件,而不会丢失与数据库的连接。程序本身实际上并没有触及文件本身,除非在数据库中生成一个新条目,但显然,文件中应该有某种对程序中数据库条目的引用。
是的,我知道如果删除文件,数据库中将有一个死条目。目前,请将其视为无法解决的不幸现实,除非您将文件更紧密地合并到程序中。
可能的解决方案以及我决定反对它们的原因
文件名内的引用
可能是最明显的选择,您可以只在文件名中引用一个指向数据库条目的引用,例如在文件名的开头包含 id:
- #1 my-example-file.txt
- #12814 this-is-of-many-files.txt
显然,这与我之前建立的内容背道而驰,因为您将被限制自由重命名文件。您必须始终牢记不要弄乱文件名中的 id,否则与您的程序的连接会中断。不幸的是,这是我目前最好的选择,但我想尽可能避免使用这种方法。
备用数据流 (ADS)
我最近发现 NTFS 文件系统上有一个非常酷的功能,ADS 允许您为文件存储不同的数据流,从而大大简化它。您可以将数据流附加到您的文件中,以保存程序中数据库条目的 id,而普通用户永远无法直接使用它。
但是,由于这是为特定文件系统保留的功能,因此 ADS 存在一些丑陋的副作用,因为您可以通过以下方式轻松丢失该部分文件:
因此我也不能真正依赖 ADS。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)