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

San*_*ndy 1 linux sqlite

我在temp文件夹中创建一个sqlite数据库。现在,我想将该文件复制到另一个文件夹。是否有任何sqlite命令重命名sqlite数据库文件?

我尝试在c ++中使用重命名函数,但返回错误18。错误18的意思是:“包含名称newname的目录必须与该文件位于同一文件系统上(由名称oldname指示)”。

有人可以建议一种更好的方法来做到这一点。

Jan*_*dec 5

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

首先,sqlite数据库只是一个文件。只要满足以下条件,就可以将其移动或复制:

  • 上次已正确关闭,因此日记中没有任何回滚的内容
  • 如果它使用日记的预写日志类型,则将对其进行完全检查。

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

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

前者有很多优点:它不能保留部分写入的文件,不能保留两个文件,这非常快,并且如果使用它来重命名旧文件,则目标名称不会有句号。不存在(最后是POSIX语义,Windows可以在NTFS上执行,但FAT文件系统则不行)。它还有一个重要的缺点:它仅在文件系统内工作。因此,您必须:

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