zoukankan      html  css  js  c++  java
  • go基础六 文件复制,断点续传

    复制方法一:

    func copyFile1(srcFile,destFile string)(int,error){
        file1,err:=os.Open(srcFile)
        if err != nil{
            return 0,err
        }
        file2,err:=os.OpenFile(destFile,os.O_WRONLY|os.O_CREATE,os.ModePerm)
        if err !=nil{
            return 0,err
        }
        defer file1.Close()
        defer file2.Close()
        //拷贝数据
        bs := make([]byte,1024,1024)
        n :=-1//读取的数据量
        total := 0
        for {
            n,err = file1.Read(bs)
            if err == io.EOF || n == 0{
                fmt.Println("拷贝完毕。。")
                break
            }else if err !=nil{
                fmt.Println("报错了。。。")
                return total,err
            }
            total += n
            file2.Write(bs[:n])
        }
        return total,nil
    
    }

    复制方法二

    func copyFile2(srcFile, destFile string)(int64,error){
        file1,err:=os.Open(srcFile)
        if err != nil{
            return 0,err
        }
        file2,err:=os.OpenFile(destFile,os.O_WRONLY|os.O_CREATE,os.ModePerm)
        if err !=nil{
            return 0,err
        }
        defer file1.Close()
        defer file2.Close()
    
        return io.Copy(file2,file1)
    }

    复制方法三L:

    func copyFile3(srcFile, destFile string)(int,error){
        input, err := ioutil.ReadFile(srcFile)
        if err != nil {
            fmt.Println(err)
            return 0,err
        }
    
        err = ioutil.WriteFile(destFile, input, 0644)
        if err != nil {
            fmt.Println("操作失败:", destFile)
            fmt.Println(err)
            return 0,err
        }
    
        return len(input),nil
    }

    文件断点续传:

    package main
    
    import (
        "strings"
        "fmt"
        "log"
        "os"
        "io"
        "strconv"
    )
    
    func main() {
        srcFile :="D:\BaiduNetdiskDownload\2019Golang进阶实战编程(学完基础必看)【千锋GO语言】\2019版-千锋golang进阶-课件\第08节_复制文件\第8节_复制文件.md"
        s := srcFile[strings.LastIndex(srcFile,"\")+1:]
        fmt.Println(s)
        tempFile :=s +"temp.md"
        fmt.Println(tempFile)
        //获取目标文件得file
        file, e := os.Open(srcFile)
        handle1(e)
        //获取输出文件得file
        openFile, e := os.OpenFile(s, os.O_WRONLY|os.O_CREATE, os.ModePerm)
        handle1(e)
        //获取临时文件得file
        file2, e := os.OpenFile(tempFile, os.O_CREATE|os.O_RDWR, os.ModePerm)
        handle1(e)
        defer file.Close()
        defer file2.Close()
        defer openFile.Close()
        // 读取临时文件的内容,设置从哪里开始
        // seek 方法,设置偏移量,后面参数距离开始,还是结束,还是当前文职
        file2.Seek(0,io.SeekStart)
        //设置读的字节数
        bs := make([]byte, 100, 100)
        //这个地方不需要处理异常
        n, err := file2.Read(bs)
    
        /*if err != nil{
            fmt.Println(err)
        }*/
        fmt.Println(n)
        countstr := string(bs[:n])
    
        fmt.Println(countstr)
        // 讲字符串转哈伟int类型去接受
        i, _ := strconv.ParseInt(countstr, 10, 64)
        fmt.Println(i)
    
        file.Seek(i,0)
        openFile.Seek(i,0)
    
        bytes := make([]byte, 1024, 1024)
    
        n1 :=-1
        n2 :=-1
    
        total :=int(i)
    
        for{
            n1, err = file.Read(bytes)
            if n1 ==0||err==io.EOF{
                fmt.Println("文件赋值完毕")
                file2.Close()
                os.Remove(tempFile)
                fmt.Println(total)
                break
            }
            n2, _ = openFile.Write(bytes[:n1])
            total +=n2
            file2.Seek(0,io.SeekCurrent)
            file2.WriteString(strconv.Itoa(n2))
    
            /*if total>800{
                panic("zhongduan")
            }*/
    
        }
    }
    func handle1(e error)  {
        if e !=nil {
            log.Fatal(e)
        }
    }
  • 相关阅读:
    编译原理入门以及战大作业心得(2)汇编简易入门 康某
    简易聊天对话框(源码)
    用js做数字字母混合的随机四位验证码
    HTML5基础
    javascript基础
    jquery.AutoComplete 仿百度文本框感应
    DropDownlist显示树状
    利用 System.Net.Mail 实现邮件发送功能
    sql 根据字段值,查找属于哪个表中的哪个字段
    sql 查看数据库中的各表的大小
  • 原文地址:https://www.cnblogs.com/xiufengchen/p/12261733.html
Copyright © 2011-2022 走看看