You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言批量移动MP4文件时rename函数执行失败原因排查

错误原因分析
  • 1. 目标父目录new不存在
    rename函数不具备自动创建中间目录的能力,初始代码没有预先创建new文件夹,直接向./new/xxx.mp4路径移动文件时,系统找不到目标父目录,返回errno=13(Permission denied)错误。你修复版里添加的system("MKDIR new")就是解决这个问题的。
  • 2. test标记未重置,导致非mp4文件/目录被误处理
    初始代码里的test变量仅在初始化时赋值为0,第一次识别到mp4文件后test被设为1,后续遍历所有目录项(包括.、..、普通文件、子目录)都会被判定为mp4文件执行rename操作,这就是你看到new文件夹下出现K3B8.mp4这类文件夹的原因:你把当前目录下的其他子目录重命名移动到了new路径下。修复版里加了if (test) { test = 0; ... }的重置逻辑就是解决这个问题的。
  • 3. 打开的文件未关闭,导致文件被占用无法重命名
    初始代码里有多余的file = fopen(nome,"r");操作,打开文件后没有调用fclose释放句柄,操作系统会判定文件处于占用状态,拒绝重命名请求,这也是rename失败的常见原因。
  • 4. mp4后缀匹配逻辑存在错误
    初始代码的后缀匹配循环写为for (int i=0;i<nome[i]!='\0';i++),由于运算符优先级问题,实际循环判断逻辑完全不符合预期,会导致后缀匹配出错、漏判/误判文件类型。
  • 冗余代码说明
    代码中存在多句h=rand()%127;语句,赋值后立即被后续赋值操作覆盖,属于无效代码,不影响运行但可以直接删除。
  • 额外优化建议
    现有逻辑生成的随机文件名有概率重复,rename遇到已存在的目标文件也会失败,建议增加目标文件是否存在的判断,重复时重新生成随机名。
单文件测试代码可正常运行的原因
  1. 测试时new文件夹已经被之前的操作创建过
  2. 只处理单个固定文件,不存在test标记未重置的问题
  3. 没有多余的fopen操作占用文件

内容的提问来源于stack exchange,提问作者c4xp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 10:15:05