- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试编写一个基本的同步程序来在两个目录之间复制文件。
计划是为已经复制的文件建立某种数据库,这样当程序扫描目录时,它可以挑选出已经复制的内容和需要再次复制的内容,即修改后的文件或新文件。
我不确定如何处理的问题之一是我应该如何处理被用户重命名的文件。我怎么知道重命名的文件实际上与数据库中列出的文件是同一个文件,尽管名称不同。是否有程序可以提取的基础文件 ID?我希望代码是可移植的,这样考虑到文件系统会有所不同,这可能会使这变得更加困难。
我想我可以记下每个文件的大小和创建日期,并将该信息保存在数据库中以确定文件是否真的只是重命名。如果两个文件具有相同的信息大小/日期,我可以存储一个哈希值或其他东西来区分它们,但我不知道这样做的效率如何。
有什么建议吗? (我正在使用 C++/QT)
最佳答案
要跟踪给定文件夹中文件的更改在您的应用程序运行时,请参阅QFileSystemWatcher
,您可以在调用 QFileSystemWatcher::addPath
后跟踪目录中的所有文件更改("directory/to/watch/")
:
The
fileChanged()
signal is emitted when a file has been modified, renamed or removed from disk. Similarly, thedirectoryChanged()
signal is emitted when a directory or its contents is modified or removed. Note thatQFileSystemWatcher
stops monitoring files once they have been renamed or removed from disk, and directories once they have been removed from disk.
为了在文件重命名后继续跟踪文件,只需使用 QFileSystemWatcher::addPath()
重新启用监视它们即可。再次。
当您的应用程序在重命名操作期间未运行时,您必须观察文件的内容(如果您还想涵盖文件已被删除和复制回来,Linux 上的 inode /其他文件系统类型上的任何内容发生了变化)。
这可以使用 MD5 和来完成,但它需要您的应用程序读取整个文件,这对于大于 10 兆字节的文件来说可能很慢。如果这个缺点是可以接受的,就把 QCryptographicHash::hash
返回的 MD5 和保存起来。 (file.readAll(), QCryptographicHash::Md5)
。当然,在某些极端情况下会发生哈希冲突,但对于大多数应用程序而言,这应该不是问题。但请注意,可能您不会检测到内容的更改。另请注意,上面的简单一行是阻塞的,并在计算 MD5 总和之前将整个文件读入内存。使用 QCryptographicHash
提供的逐步 MD5 和计算(使用 addData()
和 result()
代替)将文件“流”到MD5计算。
在读取全部内容之前比较文件大小而不是创建 MD5 总和在大多数情况下都有效(更改导致相同文件大小的情况并不常见;在这种情况下,您可以回退到 MD5总和比较)。但是在您注意到变化之后,无论如何您都需要读取 MD5 和,以便能够检测到 future 的变化!
关于c++ - 跟踪文件名更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11140142/
任何帮助深表感谢。我正在尝试创建一个 SSIS 包来遍历文件夹中的文件并获取路径+文件名,最后执行存储的过程,参数为路径+文件名。我不确定如何获取路径+文件名并将其作为参数插入到存储过程中。我附上了截
我想编写一个小脚本来搜索确切的文件名,而不是文件名中的字符串。 例如,如果我使用资源管理器搜索“主机”,默认情况下我会得到多个结果。对于脚本,我只需要我指定的名称。我假设这可能吗? 我才真正开始编写脚
str(文件.key) = '1011/101011/文件名' newFileName = str(file.key) 但是,当我运行代码时,我得到: UnicodeEncodeError: 'asc
下面这段子程基本上可以算是比较不错的通用匹配了。(PS:我突然发现CODE_LITE把我的UBB转义了!!!晕,我只好自己转义了。。。) Dim objRegExp,Matc
PHP 无法处理带有 Unicode 字符的文件:当我在浏览器上访问 testSite/главная.php 时,它会抛出此错误。 Warning: Unknown: failed to open
我正在尝试包含 Dim在 Vlookup 中。 Dim filename As String filename = Format(DateAdd("d", -6, Now()), "mm-dd-yy"
在我的日常构建项目中,我们将其库存储到其版本名称目录中。 . 对于最新的,我们正在创建符号链接(symbolic link)作为“最新”。 前任。- ls -ltr drw-r--r-- 1 4096
重新安装了 Windows 10(版本 10.0.14393)。重新安装了以下内容: java java version "1.8.0_121" Java(TM) SE Runtime Environ
我想使用 Jekyll 和 GitHub Pages 构建文档站点。问题是 Jekyll 只接受 _posts 下的文件名具有精确的图案,如 YYYY-MM-DD-your-title-is-here
我不知道我发生了什么事。我想访问一个包含多个文件的目录,假设: folder\\1.txt 2.txt 3.txt.... 现在我想根据它们的出现情况来阅读它们,我的意思是首先是最低的,只是我想按升
如何将/放入文件名(即/不分隔路径的组成部分)? 最佳答案 你不知道。 UNIX 文件名中不允许使用斜线。 关于unix - 你如何获得 a/into 文件名?,我们在Stack Overflow上找
我需要复制一个大文件夹,并重命名其中的所有文件和文件夹(如果它们包含特定字符串)。基本上我想复制所有内容并将 10 的任何实例更改为 11。 例如,如果我有一个结构如下的文件夹: mainfolder
我有一个简单的 python (2.7) 脚本,应该执行一些 svn 命令: def getStatusOutput(cmd): print cmd p = subprocess.Po
我正在尝试读取以字符串形式存储在数据文件中的文件名。那里没问题。如果我将它传递给 genfromtxt,我会收到错误“IOError:Z:\Python\Rb input.txt not found”
简单的问题。 当我尝试打开名为 text.txt 的文件时,它可以正常工作。 但是,如果我将文件重命名为 text.cir.txt,则会出现错误。 我可以做什么来修复它? FILE *fd; char
我是 c# 的业余爱好者,我一直无法找到这个问题的答案。也许我不知道要使用的正确术语。 当一个视频文件被拖到我的 exe 应用程序上时,我希望应用程序知道它是用一个文件启动的,并且能够知道该文件的路径
我知道我必须使用 Substring 来删除,但我不知道该怎么做。我需要像这样删除字符串的结尾 来自 "C:\\Users\\myname\\Pictures\\shoeImage.jpg" 到 "C
运行 eclipse 时我收到此错误。但是当我运行我的项目时,它是在内部浏览器中执行的。但它不会在默认的系统浏览器中执行。对此任何一个答案。先谢谢您的回答 最佳答案 您可以从 eclipse 更改浏览
我想要求用户选择一个要从外部存储打开的文件并接收它的路径。最好我想避免过多的编码并使用一些标准方法(众所周知,系统提供的 Intent 或类似方法)。所说的文件是SpatiaLite db文件(*.s
我有一个文件名数据库,我正在尝试使用 PG 的全文搜索工具在其中进行搜索。我在文件名表上运行搜索查询,问题是排名函数没有按照我希望的那样对结果进行排名。为了便于讨论,我们假设架构如下所示: creat
我是一名优秀的程序员,十分优秀!