是否可以防止数据库文件在外部未在c#中打开/删除的情况下被删除/修改?

时间:2019-01-15 11:01:34

标签: c# sqlite file

情况:

我当前正在调试其前身的代码,该代码处理sqlite数据库(.db3文件格式)。 在软件中,您可以加载一个或多个数据库。这些数据库上的常规信息(获取所有表名,获取所有列名等)直接从文件中处理,但是对于实际数据信息,数据库被复制到内存数据库中,从中查询数据。 因此,在收集了初始信息并将所有数据保存到内存数据库之后,不再使用实际的文件。

但是,如果用户从列表中添加/删除数据库,它们仍将显示在GUI上并被引用。

问题:

所有这些都会导致以下问题:如果用户修改/删除了已加载数据库的文件(这是可能的,因为我们没有与文件的开放连接),则软件的内部数据库池与实际文件列表不同。结果,在这种情况下,一旦使用的数据库列表被更新,我们就具有不确定的行为。

可能的解决方案(?)

  • 也许最好的办法是重新编写完整的代码,并将所有内容保留在内存数据库中(GUI表示,数据,数据库信息等)。在这种情况下,我完全不需要担心文件。但是,这将意味着大量的返工,并且……没有时间这样做^^
  • 只要打开所有文件的sqlite连接并保持打开状态,只要相应的内存数据库被列为“已使用”(我认为这不是一个好选择)。
  • 找到一种防止在不打开文件的情况下删除/修改文件的方法。我不确定是否/如何可能,到目前为止,我所读的是是否需要以编程方式更改文件的访问权限,这会导致涉及Windows中用户权限的若干问题...

问题: 还有其他解决方法/建议吗?对我而言,最好/最简单的方法是找到一种方法来防止文件列表被修改。到目前为止,我还没有找到一种适合该方法的好的解决方案。

1 个答案:

答案 0 :(得分:0)

保持对SQLite数据库文件的连接打开将阻止Windows删除它。

一个糟糕但快速的解决方案是允许原始代码将文件读取到内存,然后获取与文件的新连接。您可以保持此连接打开而无需执行任何操作,以防止其被删除。应用程序的用户使用完该数据集后,就可以处置该连接,从而允许再次删除该文件。

我会建议这样做-这是一个肮脏的解决方法。但是,它可能会给您更多时间来适当地重构代码。