V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fishcat
V2EX  ›  程序员

为啥下载都喜欢弄一个临时目录

  •  
  •   fishcat · 2017-09-20 10:53:56 +08:00 · 4740 次点击
    这是一个创建于 2623 天前的主题,其中的信息可能已经有所发展或是发生改变。
    现在的项目需要写一个下载工具,GitHub 上看了一下,很多下载都喜欢弄一个临时目录,但是迅雷、aria2 等下载不是直接就下载到需要保存的目录了吗?
    查了一下,是不是历史原因,以前可能需要保存的文件夹可能会出现磁盘空间不够,所以先下载到临时目录再拷贝过去?
    是不是现在我可以直接想 aria2 一样直接下载到需要保存的目录,然后减少一次拷贝工作,这个的坑在哪?
    9 条回复    2017-09-20 13:18:50 +08:00
    ysc3839
        1
    ysc3839  
       2017-09-20 10:54:40 +08:00
    “很多下载”?能否举个例子?
    fishcat
        2
    fishcat  
    OP
       2017-09-20 10:57:45 +08:00
    @ysc3839 比较多 https://github.com/search?utf8=%E2%9C%93&q=%E4%B8%8B%E8%BD%BD&type=Repositories 可以自己看一下,我看了几个都是有临时目录的
    yonka
        3
    yonka  
       2017-09-20 11:03:31 +08:00
    1. 下载都需要写文件,内存 buf 不够
    2. 写临时文件然后下载完 copy/move 过去(可能)可以保证文件完整性
    3. 直接写文件的话,需要区分“是否完整文件”,比较麻烦
    4. 迅雷等一般是在当前目录下存储“临时文件”,不过是特殊的临时文件,额外记录了进度信息等。 因为迅雷等要支持断点续传,如果写在临时目录,续传时可能就被清理了。
    fishcat
        4
    fishcat  
    OP
       2017-09-20 11:05:27 +08:00
    @yonka 谢谢
    @ysc3839 感谢, 主要是没有做过这一块,所以想了解一下
    murmur
        5
    murmur  
       2017-09-20 11:07:35 +08:00
    下载的如果真的是临时文件,那么用户随便运行个垃圾清理软件就可以把这些东西删掉了
    另外 temp 目录一般不需要权限吧
    安装的时候和用户要一次提权就可以了
    另外国内软件现在用 temp 的应该一半一半了,360 系的反正都不咋用临时目录,下载的安装包、驱动什么都可以拷出来
    nifury
        6
    nifury  
       2017-09-20 11:09:09 +08:00
    LZ 说的是像 IDM 那样分块下载再合并的么? IDM 这样做好像是因为多线程下载操作同一个文件的话容易出现问题(我真不知道为何容易出现问题)
    fishcat
        7
    fishcat  
    OP
       2017-09-20 11:13:57 +08:00
    @murmur 感谢
    @nifury 感谢
    laucenmi
        8
    laucenmi  
       2017-09-20 11:54:52 +08:00
    零时文件,或者藏大姐姐
    owenliang
        9
    owenliang  
       2017-09-20 13:18:50 +08:00
    mv 可以保障原子性。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5654 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 08:43 · PVG 16:43 · LAX 00:43 · JFK 03:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.