gpt4 book ai didi

linux - 将 SQLite 数据库复制到另一个路径

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:30:29 24 4
gpt4 key购买 nike

我正在临时文件夹中创建一个 sqlite 数据库。现在我想将该文件复制到另一个文件夹。有没有sqlite命令可以重命名sqlite数据库文件?

我尝试在 C++ 中使用重命名函数,但它返回错误 18。错误号 18 表示:“包含名称 newname 的目录必须与文件位于同一文件系统上(如名称 oldname 所示)”。

有人可以建议更好的方法吗。

最佳答案

在正确的文件系统上使用临时目录!

首先,sqlite数据库只是一个文件。它可以随心所欲地移动或复制,前提是:

  • 上次正确关闭,所以日志中不会有回滚
  • 如果它使用预写日志类型的日志,它是完全检查点的。

因此将其作为文件移动是正确的。现在有两种方法可以移动文件:

  • 使用重命名系统调用。
  • 通过复制文件并删除旧文件。

前者有很多优点:它不能留下部分写入的文件,它不能留下两个文件,它非常快,如果你用它来重命名旧文件,目标没有句号名称将不存在(最后一个是 POSIX 语义,Windows 可以在 NTFS 上执行此操作,但不能在 FAT 文件系统上执行)。它还有一个重要的缺点:它只能在文件系统中工作。所以你必须:

  • 如果您要重命名它以确保在过程失败时不会留下部分写入的文件,则您需要使用重命名,因此必须使用同一文件系统上的临时位置。这通常是通过在同一目录中使用不同的名称而不是使用临时目录来完成的。
  • 如果您重命名它是因为目的地可能很慢,例如因为你想把它放在网络共享上,你显然想在不同的文件系统上使用临时目录。这意味着您必须读取文件并以新名称写入文件。在标准 C 或 C++ 库中没有这方面的功能,但许多库会有一个(像 python 这样的高级语言会有一个,你总是可以只执行 /bin/mv 来做给你)。

关于linux - 将 SQLite 数据库复制到另一个路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12275872/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com