c - 如何检查文件是否完全到达/复制?

标签 c linux file file-read

我们有一项服务可以在文件到达/复制到该文件夹​​时处理来自特定文件夹的文件。现在,在文件完全到达之前,服务正在处理并因错误而失败。现在,如何检查文件完全复制后只读?

该服务在 Linux 上运行。之后,失败并显示“ERR_READING”,进程将休眠 5 秒。甚至,进程无法读取文件。可能在完全复制之前读取文件可能会损坏文件

下面是我们用来从文件中读取数据的代码:

int file_read( char *fname, TRANSACTION **tr )
{
    int ret;
    FILE    *fp;

    fp = fopen( fname, "r" );
    if( fp == NULL )
    {
        return( NO_FILE );
    }

    if(( ret = tr_read_tran( fp, tr ))!=0)
        {
        sleep(5);
        ret = tr_read_tran( fp, tr );
    }

    fclose( fp );

    return( ret );
}


static int tr_read_tran( FILE *fp, TRANSACTION **tr )
{
    int ret,
        t;
    char    *p,
        *bkpt,
        buf[ BUFSIZE ];

    if( fgets( buf, BUFSIZE, fp ) == NULL )
    {
        return( ERR_READING );   ***//Failing here because of file not completeley arrived***
    }
   ....
   ...
   ret = //gets value for ret

    return( ret )
}

最佳答案

您可以为下载的文件创建单独的文件夹。 然后只需将它们重命名/移动到工作目录即可。

另一种方法是在名称后附加一些“特殊”字符,这将告诉服务文件仍在下载中。

关于c - 如何检查文件是否完全到达/复制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31848018/

相关文章:

c++ - Linux elf .text方向

java - 如何检查(字符串)位置是否是 Java 中的有效保存路径?

c++ - XCode 程序优雅关闭

c - 从 c 程序在远程主机上执行命令

linux - Fedora 上未安装 Vim

linux - 绕行和 GCC 内联汇编 (Linux)

javascript - 如何在 JavaScript 中模拟一个大尺寸的文件以进行测试?

python - 在python中读取文件

关于 PCA9555 扩展器上#interrupt-cells 配置的混淆

c - 使用函数 _mm_clflush 刷新大型结构的正确方法