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

向视频文件末尾写入字节后文件全零?求技术原因分析

问题描述
  • 脚本功能:遍历目标目录下所有视频文件,在文件末尾追加一个\0字节
  • 小批量测试表现:可正常遍历文件,写入操作耗时极短,多次测试无异常
  • 大规模运行异常场景:Mac OSX Ventura系统下,通过Paragon驱动访问8TB extFS格式USB3外接硬盘(约5000个视频文件)
    • 单个文件处理耗时长达5-40秒
    • 处理后视频无法打开,即使删除写入的\0字节仍无法播放
    • 十六进制编辑器查看发现整个文件被填充为0
  • 脚本核心逻辑:以ab模式打开文件,仅执行1次\0字节写入,无循环重复写入代码
脚本代码
import sys
import glob

exts = ["mkv", "mp4", "avi"]
TestFile = sys.argv[1]

Folders = glob.glob(TestFile+"/*/")
Folders.sort(key=str.lower)

for Folder in Folders:
    Files = []
    Files = Files+[f for ext in exts for f in glob.glob(Folder+"/**/*."+ext)]
    Files.sort(key=str.lower)
    for File in Files:
        try:
            with open(File,'ab') as f:
                f.write(b"\0")
        except:
            continue
目标文件夹结构
ParentFolder
    Folder 1
        File1.mp4
    Folder2
        File2.mkv
    ...
        ...
可能原因与解决方案

可能原因

  1. Paragon extFS驱动兼容性问题:Mac系统第三方extFS驱动对ab模式的文件追加操作处理异常,错误地将文件覆盖为全0而非仅追加字节
  2. 外接硬盘缓存/写入策略异常:大文件量+外接硬盘的缓存机制冲突,导致写入操作被错误执行
  3. Python文件操作与驱动逻辑冲突:Pythonopen函数的ab模式行为,与Paragon驱动对extFS文件系统的处理逻辑不兼容

解决方案

  1. 更换文件系统访问方式

    • 备份数据后,将硬盘格式化为Mac原生支持的APFS或HFS+格式再执行操作
    • 或使用原生Linux系统挂载该extFS硬盘运行脚本,规避第三方驱动影响
  2. 修改文件写入逻辑

    • 避免直接使用ab模式,改用先读再写的方式(适合小文件,大文件谨慎使用):
      try:
          with open(File, 'rb') as f_in:
              content = f_in.read()
          with open(File, 'wb') as f_out:
              f_out.write(content + b"\0")
      except:
          continue
      
    • 或使用底层系统调用明确指定追加位置:
      import os
      try:
          fd = os.open(File, os.O_WRONLY | os.O_APPEND)
          os.write(fd, b"\0")
          os.close(fd)
      except:
          continue
      
  3. 添加操作校验逻辑

    • 在写入前后校验文件大小,确认仅增加1字节,及时发现异常:
      import os
      try:
          original_size = os.path.getsize(File)
          with open(File,'ab') as f:
              f.write(b"\0")
          new_size = os.path.getsize(File)
          if new_size != original_size + 1:
              print(f"异常文件:{File},原大小{original_size},新大小{new_size}")
      except:
          continue
      

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 18:25:18