Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在外部驱动器上写入的文件丢失_C_Linux_File_Copy - Fatal编程技术网

C 在外部驱动器上写入的文件丢失

C 在外部驱动器上写入的文件丢失,c,linux,file,copy,C,Linux,File,Copy,我正在创建一个应用程序,将某些文件从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/**/, 064

我正在创建一个应用程序,将某些文件从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;
}
但问题是有时我用其他计算机找不到文件


昨天,它再次发生,我已经使用ls和文件进行了检查 有。但今天当我在家打开它时,我意识到它少了一个 24个文件中的一个


如果某个文件先存在,然后在另一个位置插入硬盘(或上下电源)后丢失,则可能是因为您没有正确卸载驱动器。

对于生产代码,请始终测试所有相关调用的结果,以确定是否有错误!为了简单地复制文件,我选择了一个shell脚本。特别是当您担心程序的行为时,您需要检查
open()
write()
,和
close()
-以及您正在检查的
read()
read()
返回
ssize\t
btw,不是
size\u t
。昨天,它再次发生,我已经用ls检查过了,文件就在那里。但今天当我在家里打开它时,我意识到它丢失了24个文件中的一个文件。