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