微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

根据大小重命名和移动我的文件并不总是在 c 中工作为什么?

如何解决根据大小重命名和移动我的文件并不总是在 c 中工作为什么?

我有一个用 C 编写的应用程序,它生成各种数据参数,我将这些数据参数登录到名为 debug_log.txt 的文本文件中。每当此日志文件达到 1 MB 时,我都会使用时间戳 ex debug_log_20200106_133000.txt 重命名文件名并将其移动到同一目录中。然后我重新打开 debug_log.txt 以记录新参数。

if(stat("/home/log/debug_log.txt",&statFiledbg) == 0) 
{
    if(statFiledbg.st_size >= 1048576) // 1MB
    { 
        current_time = time(0);
        strftime(time_buffer,sizeof(time_buffer),"%Y%m%d_%H-%M-%s",gmtime(&current_time));
        sprintf(strSysCmddbg,"mv /home/log/debug_log.txt /home/log/debug_log%s.txt",time_buffer);
        system(strSysCmddbg);
        fp_dbglog = freopen("/home/log/debug_log.txt","w",fp_dbglog);
    }
}

代码大部分时间都可以工作,直到它不工作为止。运行应用程序几天后,我看到 debug_log.txt 增长超过 1 MB,而上次移动和重命名的日志文件为空。

可能是什么原因?

解决方法

使用 C 标准库中的 rename 函数(在 stdio.h 中)并检查 errno 是否无法知道失败的确切原因。

在处理文件和一般的 I/O 时,有很多很多事情可能会出错。

我公司的一位高级开发人员告诉我的。使用 system() 有什么问题吗?

是的:它是不必要的(C 和 POSIX 为您提供了这样的基本用法),不可移植(假设您在一个具有“mv”的系统中),速度较慢(它需要产生另一个进程)并且在许多用例中都是错误的(例如,除非您保存 mv 的文本输出,否则无法知道究竟是什么失败了)。

查看诸如Moving a file on Linux in C之类的问题和答案以获得深入的解释。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。