【问题标题】:Missing file written on external drive缺少写入外部驱动器的文件
【发布时间】: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 个文件中缺少一个文件。

标签: c linux file copy


【解决方案1】:

昨天,它再次发生,我已经使用 ls 和文件检查 有没有。但是今天当我在家里打开它时,我意识到它缺少一个 共 24 个文件。

如果一个文件首先存在,然后丢失在另一个地方插入HDD(或关闭和启动),你可能只是没有正确卸载驱动器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-28
    • 1970-01-01
    • 1970-01-01
    • 2020-04-25
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多