C ++:重命名而不是删除&使用同步时复制

时间:2014-04-05 07:31:55

标签: c++ file sync rename put

目前我在同步中有以下部分代码:

...

int index = file.find(remoteDir);
if(index >= 0){
    file.erase(index, remoteDir.size());
    file.insert(index, localDir);
}

...

// Uses PUT command on the file

现在我想改为:

  • 如果文件与以前相同(重命名除外),请不要使用PUT命令,而是使用重命名命令

TL; DR:除了重命名之外,有没有办法检查文件是否与之前相同?那么比较两个文件(使用不同的名称)以查看它们是否相同的方法呢?

2 个答案:

答案 0 :(得分:2)

检查md5sum,如果不同则修改文件。 重命名文件的md5校验和将保持不变。文件内容的任何更改都会给出不同的值。

答案 1 :(得分:0)

我首先尝试使用md5的Renjith方法,但是我无法使用它(也许是因为我的C ++是针对Windows而不是Linux,我不知道。)

所以我编写了自己的函数来执行以下操作:

  • 首先检查文件是否完全相同(如果不是这样,我们可以为函数返回false而不是继续)。
  • 如果大小匹配,请继续按BUFFER_SIZE检查文件缓冲区(在我的情况下,这是1024)。如果文件的整个缓冲区匹配,则返回true。

PS:确保在返回之前关闭所有打开的流..我的错误是我在返回语句后关闭了一个流的代码(因此它从未被调用过),因此我在尝试时有错误13重命名文件。