【发布时间】:2014-12-23 08:15:13
【问题描述】:
我正在创建一个应用程序,用于将某些文件从我们的 ubuntu 服务器复制到外部硬盘(使用 ntfs 格式化)以进行备份,并且大多数文件大小超过 4GB。 问题是有时缺少某些文件(不是所有文件,也不是所有情况)。
这些是我的代码:
char buf[BUFSIZ];
size_t size;
int source = open(c_fileName, O_RDONLY, 0);
int dest = open(c_targetFile, O_WRONLY | O_CREAT /*| O_TRUNC/**/, 0644);
while ((size = read(source, buf, BUFSIZ)) > 0) {
write(dest, buf, size);
*progress+=size;
}
close(source);
close(dest);
在应用程序使用此代码完成写入后,我尝试检查文件是否存在并且大小相同:
if (fsource = fopen(c_targetFile, "rb")) {
isSourceFileExists=true;
// check file size
fseek (fsource, 0, SEEK_END); // non-portable
size=ftell(fsource);
fclose(fsource);
}else{
isSourceFileExists=false;
size=0;
}
但问题是有时我无法在其他计算机上找到该文件。
【问题讨论】:
-
对于生产代码,请始终测试所有相关调用的结果是否有错误!
-
要简单地复制文件,我会使用 shell 脚本。
-
特别是如果您担心程序的行为,您需要检查来自
open()、write()和close()的结果——以及您所使用的read()正在检查。 -
read()返回ssize_t顺便说一句,而不是size_t。 -
昨天,它再次发生,我已经使用 ls 检查并且文件在那里。但是今天我在家里打开它,我发现它在 24 个文件中缺少一个文件。